검색

레이블이 Linux인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Linux인 게시물을 표시합니다. 모든 게시물 표시

2022년 9월 13일

Let’s Encrypt SSL/TLS 인증서을 이용한 무료 SSL 구현하기

Let's Encrypt 로 알려진 비영리 서비스 공동 설립자인 호주 컴퓨터 과학자 Peter Eckersley 님의 부고 소식을 접하고 뜻한바가 있어 오라클 클라우드 환경에서 구동중인 개인 연구 목적의 웹에 SSL 기술을 적용하기로 했다.

Let's Encrypt 는 비영리 그룹 Internet Security Research Group 에서 제공하는 서비스이다. 이 서비스를 사용하면 무료로 TLS 인증서를 발급하여 사용할 수 있다. 관련 자료가 많아 구현에 어려움이 없었다. 

https://letsencrypt.org

환경

  • OracleCloud
  • CentOS Linux 7.9.2009 
  • Nginx 1.16.1 or HTTPD 


SSL 구현하기 ( Apache HTTPD )

① 무료 도메인 등록

SSL 을 적용을 위해서는 도메인이 필요한데  Duck DNS (https://www.duckdns.or) 를 방문하여 무료 도메인을 등록한다. 참고로 서비스를 이용을 위해서는 회원 가입이 필요하다.


https://www.duckdns.or
https://www.duckdns.or


② Let’s Encrypt Client 다운로드

도메인 등록이 완료 되었다면 인증서를 생성해보자. 먼저 관련 도구를 설치한다. (CentOS + HTTPD 환경)

  

sudo yum install epel-release
sudo yum install certbot python2-certbot-apache mod_ssl


③ Let’s Encrypt 인증서 생성

Let’s Encrypt 인증서는 다음과 같은 명령을 사용하여 간단하게 생성할 수 있다. 설정 역시 기존 HTTPD 서버의 가상호스트 설정에 선택하여 추가할 수 있기 때문에 거의 바로 사용이 가능하다. 


sudo certbot --apache -d 도메인이름


이제 자신의 환경에 맞도록 일부를 수정하고 웹서버를 재 시작하면 SSL 이 이용한 웹 서비스가 동작함을 확인할 수 있을 것이다. 

인증서 갱신은 아래와 같은 명령으로 간단하게 처리할 수 있다. 

sudo certbot renew


SSL 구현하기 ( NGINX )

위의 ① 무료 도메인 등록 부분은 동일하게 처리한다.

② Let’s Encrypt Client 다운로드 ( Nginx )

  1. sudo yum install epel-release
  2. sudo yum install certbot-nginx


③ Let’s Encrypt 인증서 생성

Let’s Encrypt 인증서는 다음과 같은 명령을 사용하여 간단하게 생성할 수 있다. 설정 역시 자동으로 추가 되기 때문에 서버만 재시작하면 바로 사용할 수 있다.

  1. sudo certbot --nginx -d example.com

참고자료

2021년 9월 15일

CentOS 7 환경에서 Apache 웹서버 MPM 모듈 evnet로 변경하기

Apache 웹서버는 prefork 불리우는 방법으로 클라이어트의 요청을 처리하도록 되어 있다. 

prefork 는 Apache 2 부터 도입된 MPMs (다중처리 모듈들, Multi-Processing Modules) 중 하나이다. MPMs 에는 Prefork, Worker, Event 가 있으며 이외에도 Threadpool, Perchild, Leader 등 여러가지가 있다. yum 을 사용하여 설치되는 httpd 패키지는 prepork, worker, event 를 지원한다.

yum 을 설치를 하면 디폴트로 prepork 방식으로 동작하는데 아래 명령으로 현재 적용된 MPM 모듈을 확인할 수 있다.

httpd -V

아래와 같은 내용으로 출력될 것이다.



환경

  • CPU 2.0GHz (6Core),  16GB , 500GB * 2 (raid)
  • CentOS 7.8.2003  (64bit)
  • Apache 2.4.6 (64bit) 


변경

Prefork 방식의 성능 저하는 단일 스레드의 자식 스레드에서 한번에 하나의 요청을 순차적으로 처리하는 방식에 의한 한계를 예상하고 성능적으로 가장 우수하다고 알려진 event  방식으로 변경하였다. 

① /etc/httpd/conf.modules.d 경로의 00-mpm.conf 설정 파일에서 prefork MPM 부분은 주석처리하고 마지막의 event MPM 부분의 주석을 제거한다.

# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:

# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so

# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
LoadModule mpm_event_module modules/mod_mpm_event.so

② 아파치 서버를 다시 시작하면 event MPM 방식으로 동작하게 된다.


systemctl restart httpd.service 
httpd -V


참고

How To Install the Apache Web Server on CentOS 7

Understanding Apache 2 MPM

Apache MPMs Explained

Change Apache MPM on CentOS7

2021년 6월 19일

이미지/영상 프로세싱을 위하여 자바를 지원하는 환경으로 OpenCV 설치하기

자바 기반 웹 프로그램에 이미지/영상 프로세싱 처리를 구현하기 위하여 OpenCV (Open Source Computer Vision) 설치하려고 한다.

설치는 대상은 아래와 같다. 

Development
  • JAVA 1.8.x
  • Eclipse 4.17.0
  • Tomcat 8.x 
  • HW : MacBook Pro 2019 
    • macOS Big Sur 11.4
    • 2.3Ghz 8Core Intel Corei9 
    • 16GB 2667 Mhz DDR4
    • SSD 1TB 
Server 
  • Tomcat 8.5.58.0
  • Open JDK 1.8.0_292-b10
  • Oracle Cloud : VM.Standard.E2.1.Micro 
    • CentOS Linux release 7.9.2009 (Core)
    • 1 OCPU, 1GB MEMORY, 50GB Block Volume
    • 1Network 0.48 Gbps

맥북에 설치하기

설치는 Homebrew 을 사용한다. (Homebrew 는 이미 설치된것으로 가정)


그림1. The Missing Package Manager for macOS (or Linux)


① XCode & Apple Command Line Tools 설치

XCoce 는 앱스토어(App Store)를 통하여 설치한다.


그림2. App Store

또한 최신 make , gcc 등과 같은 도구 설치를 위하여 콘솔에 아래 명령을 입력한다.

   
sudo xcode-select --install

② 자바 빌드 도구인 Apache Ant 를 설치한다.
     
brew update
brew install ant

③ OpenCV 설치
다음 명령을 사용하여 homebrew 에서 제공하는  버전을 확인해보면 2.x, 3.x 버전만 지원하고 있다. 최신 버전 설치를 위하여 아래와 같이 소스를 빌드하여 설치한다.

  
  brew search opencv

자바 지원을 위하여 Opencv 패키지 설정에서 아래와 같이 수정한다. (Homebrew 에서 패키지는 Formula 라  부른다 )

  
  brew edit opencv

-DBUILD_opencv_java=OFF  을  -DBUILD_opencv_java=ON  으로 변경




만일 빌드과정에서 특정 자바 버전을 지정할 필요가 있다면 brew formula 의 cmake 파트에  -DOPENCV_JAVA_TARGET_VERSION=1.8 값을 추가해줘야 한다. 
  
  args = std_cmake_args + %W[
      -DCMAKE_OSX_DEPLOYMENT_TARGET=
      -DBUILD_JASPER=OFF
      -DBUILD_JPEG=OFF
      -DBUILD_OPENEXR=OFF
      -DBUILD_PERF_TESTS=OFF
      -DBUILD_PNG=OFF
      -DBUILD_PROTOBUF=OFF
      -DBUILD_TESTS=OFF 
      -DOPENCV_JAVA_TARGET_VERSION=1.8

다음 명령을 실행하여 설치를 시작한다.
  
  brew install --build-from-source opencv

소스에서 빌드하여 설치하는 것은 많은 자원이 소요된다.


약 17분 정도가 소요되었다.


 /usr/local/Cellar/opencv/4.x.x/share/java/opencv4/.

자바에서 사용하기 위해서  jar 파일과 오브젝트 파일이 필요하다. (설치경로 확인 필수)

오라클 클라우드 리눅스에 설치하기

① 빌드를 위한 도구들을 설치한다.

  
  sudo yum install cmake3 gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools 
  gimp-help-browser zlib-devel libtiff-devel libjpeg-devel libpng-devel 
  gstreamer-devel libavc1394-devel libraw1394-devel libdc1394-devel 
  jasper-devel jasper-utils swig python libtool nasm build-essential ant
  

② OpenCV 홈페이지에서 최신 소스를 다운로드한다. 빌드를 위한 opencv 디렉토리를 생성하고 해당 폴더 아래에 다운로드한 소스파일 압축을 푼다. 이제 빌드를 위하여 opencv 폴더로 이동한다.

  

wget https://github.com/opencv/opencv/archive/4.5.2.zip
mkdir opencv
unzip 4.5.2.zip -D ./opencv
cd opencv

③ 아래 명령을 입력하여 빌드를 시작한다.  

  

    cmake3 -D CMAKE_BUILD_TYPE=RELEASE 
    -D CMAKE_INSTALL_PREFIX=/usr/local 
    -D INSTALL_C_EXAMPLES=ON 
    -D INSTALL_PYTHON_EXAMPLES=ON 
    -D OPENCV_GENERATE_PKGCONFIG=ON 
    -D BUILD_EXAMPLES=ON opencv-4.5.2/


make 명령시 -j 옵션은 병렬 처리를 위한 코어 수를 의미하며 코어 수는 nproc 명령을 사용하면 알 수 있다.
오라클 클라우스 서버의 경우 빌드에  많은 시간이 소요되었다. (1 시간 이상)

       
      make -j2



설치 역시 많은 시간이 소요된다.
  
      sudo make install

라이브러리 설치 위치 : /usr/local/share/java/opencv4

④ 정상 동작 확인을 위하여 간단 예제를 사용하였다.

 
    import org.opencv.core.Core;
    import org.opencv.core.CvType;
    import org.opencv.core.Mat;
    
    public class Hello {
    
    	public static void main( String[] args ){
    		System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
    		Mat mat = Mat.eye( 3, 3, CvType.CV_8UC1 );
            System.out.println( "mat = " + mat.dump() );
    	}
    }
    

테스트는 아래와 같이 소스를 컴파일하여 실행한다.

 
javac -cp /usr/local/share/java/opencv4/opencv-452.jar Hello.java

java -Djava.library.path=/usr/local/share/java/opencv4 -cp /usr/local/share/java/opencv4/opencv-452.jar:. Hello


⑤ Tomcat 환경에서 사용할 예정이기 때문에 아래와 같이 .bash_profile 파일에 네이티브 라이브러리 경로 추가한다. opencv-452.jar 은 사용하는 웹 프로그램의 WEB-INF/lib 복사해준다. 한가지 아쉬운 점은 무료로 사용하는 Oracle VM 의 성능이 MacBook Pro 와 너무 차이가 크다.

 

CATALINA_OPTS=' -Djava.library.path=/usr/local/share/java/opencv4 '
export CATALINA_OPTS ;


위와 같이 설치된 리눅스에서는 org.opencv.xphoto.Xphoto 패키지가 포함되지 않았다. 추가 모듈 설치가 필요한 부분으로 예상하고 git 에서 opencv_contrib 을 다운로드 하고 아래와 같은 방법으로 다시 빌드를 진행하였다. (처음에는 opencv 소스 역시 git 에서 다운하여 빌드를 하였으나 오류가 해결되지 않아 opencv_contrib 만 git 에 소스를 사용하는 방법을 사용했다.)

  
wget https://github.com/opencv/opencv/archive/4.5.5.zip
unzip 4.5.5.zip
git clone https://github.com/opencv/opencv_contrib.git
mkdir build 
cd build

cmake3 -D CMAKE_BUILD_TYPE=RELEASE \
-D OPENCV_EXTRA_MODULES_PATH=/home/opc/src/opencv_contrib/modules \ 
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON  \
-D INSTALL_PYTHON_EXAMPLES=ON  \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_opencv_ximgproc=ON \
-D BUILD_EXAMPLES=ON /home/opc/src/opencv-4.5.5
 
make -j2
sudo make install 

참고자료

2020년 10월 4일

오라클 클라우드 무료 체험하기 - Part1 MySql 구축하기

무료로 클라우드 서비스 이용이 가능하다는 글을 접하고 자체 서버를 이용하여 운영하던 개발 환경을 클라우드 환경으로 변경하고자 시도하였다. 클라우드라 하여 특별한 것은 없었고 용어 또는 논리적인 개념의 이해가 요구되었다. 처음 클라우드 서비스를 접하는 거지만 많은 인터넷 자료들이 있고 과거 물리적 서버 구축 경험이 있어 실재 구축은 1시간 정도 소요된 것 같다.

오라클 클라우드

본 글에서는 클라우드 서비스를 기반으로 WEB/WAS 서버와 DBMS 서버 구현 작업을 계획하였다. 무료 오라클 클라우드는 아래와 같은 순서의 작업을 통하여 이용할 수 있다.(→ MySql 서버 생성 포함) 

① Oracle Cloud 계정 생성

② VM 인스터스 생성 (CentOS 7.x)

③ 원격 접속 

④ MySql 설치

⑤ VM 인스턴스  공인 IP 및 방화벽 설정

⑥ 로컬에서 MySQLWorkbench 툴을 이용한 MySql 접속


Oracle Cloud 계정 생성

계정 생성을 위하여 아래 홈페이지를 방문한다. 

https://www.oracle.com/kr/cloud/


Oracle Cloud Tier 무료체험하기 버튼을 클릭하여 계정을 생성한다. (계정 생성을 위해서는 주소, 모바일 인증 그리고 신용카드 등록이 필요하다.)

계정 생성이 완료되면 자동으로 클라우드 서비스 관리를 위한 웹 콘솔로 이동된다.


인스턴스 생성하기

웹 콘솔에서 VM 인스턴스 생성 을 클릭한다.


OS 이미지는 디폴트로 Oracle Linux 선택되어 있지만 변경이 가능하고 평소 사용하던 CentOS 를 선택하였다. 


리눅스 인스턴스의 경우는 원격 접속을 위하여 비밀번호 대신 SSH 키쌍을 사용하도록 되어 있다. 원격 접속 작업을 위하여 전용 키를 다운로드 한다.



인스턴스 생성이 완료되면 IP 와 계정을 확인 한다.



리모트 접속

리모트 접속은 인스턴스 생성 과정에서 다운로드한 SSH 키파일, 아이디 그리고 IP 를 이용하여 아래와 같이 접속할 수 있다. 개발 환경이 맥을 사용하고 있어 내장된 ssh  프로그램을 사용하였다.

ssh -i [키파일 경로] [아이디]@[IP]
 
ssh -i ssh-key-2020-10-03.key opc@xxx.xxx.xxx.xxx
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
ECDSA key fingerprint is SHA256:cb0AAC47vug6I8sNC7NPaIswm1+Xulwx8SAATP9D4+c. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts.

MySql 설치

MySQL 을 yum 명령을 사용하여 설치하게되면 (실제) MariaDB 가 설치된다. 

sudo yum install mysql
 sudo yum install mysql
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
 * epel: d2lzkl7pfhq30w.cloudfront.net
 * extras: mirror.kakao.com
 * updates: mirror.kakao.com
Resolving Dependencies
--> Running transaction check
---> Package mariadb.x86_64 1:5.5.65-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================================
 Package                        Arch                          Version                                 Repository                   Size
========================================================================================================================================
Installing:
 mariadb                        x86_64                        1:5.5.65-1.el7                          base                        8.7 M

Transaction Summary
========================================================================================================================================
Install  1 Package

Total download size: 8.7 M
Installed size: 49 M
Is this ok [y/d/N]:  y
Downloading packages:
mariadb-5.5.65-1.el7.x86_64.rpm                                                                                  | 8.7 MB  00:00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:mariadb-5.5.65-1.el7.x86_64                                                                                        1/1 
  Verifying  : 1:mariadb-5.5.65-1.el7.x86_64                                                                                        1/1 

Installed:
  mariadb.x86_64 1:5.5.65-1.el7                                                                                                         

Complete!

 
필요한것은 MySql Community Edition이기 때문에 설치된 Maria DB 를 삭제한다.
[opc@instance-20201003-1526 ~]$grep -i -e maria
mariadb.x86_64                         1:5.5.65-1.el7                 @base     
mariadb-libs.x86_64                    1:5.5.65-1.el7                 @anaconda 

[opc@instance-20201003-1526 ~]$yum remove mariadb-libs.x86_64 mariadb.x86_64
Loaded plugins: fastestmirror, langpackssudo 
Resolving Dependencies
--> Running transaction check
---> Package mariadb.x86_64 1:5.5.65-1.el7 will be erased
---> Package mariadb-libs.x86_64 1:5.5.65-1.el7 will be erased
--> Processing Dependency: libmysqlclient.so.18()(64bit) for package: 2:postfix-2.10.1-9.el7.x86_64
--> Processing Dependency: libmysqlclient.so.18(libmysqlclient_18)(64bit) for package: 2:postfix-2.10.1-9.el7.x86_64
--> Running transaction check
---> Package postfix.x86_64 2:2.10.1-9.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

===========================================================================================================================================================
 Package                               Arch                            Version                                    Repository                          Size
===========================================================================================================================================================
Removing:
 mariadb                               x86_64                          1:5.5.65-1.el7                             @base                               49 M
 mariadb-libs                          x86_64                          1:5.5.65-1.el7                             @anaconda                          4.4 M
Removing for dependencies:
 postfix                               x86_64                          2:2.10.1-9.el7                             @anaconda                           12 M

Transaction Summary
===========================================================================================================================================================
Remove  2 Packages (+1 Dependent package)

Installed size: 65 M
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : 1:mariadb-5.5.65-1.el7.x86_64                                                                                                           1/3 
  Erasing    : 2:postfix-2.10.1-9.el7.x86_64                                                                                                           2/3 
  Erasing    : 1:mariadb-libs-5.5.65-1.el7.x86_64                                                                                                      3/3 
  Verifying  : 1:mariadb-libs-5.5.65-1.el7.x86_64                                                                                                      1/3 
  Verifying  : 2:postfix-2.10.1-9.el7.x86_64                                                                                                           2/3 
  Verifying  : 1:mariadb-5.5.65-1.el7.x86_64                                                                                                           3/3 

Removed:
  mariadb.x86_64 1:5.5.65-1.el7                                             mariadb-libs.x86_64 1:5.5.65-1.el7                                            

Dependency Removed:
  postfix.x86_64 2:2.10.1-9.el7                                                                                                                            

Complete!


MySQL 8.0 Community Edition 설치는 설치 소스에 대한 YUM 레파지토리를 추가하고 진행하면 된다.

[opc@instance-20201003-1526 ~]$ wget http://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm
--2020-10-03 08:22:41--  http://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm
Resolving repo.mysql.com (repo.mysql.com)... 104.76.84.199
Connecting to repo.mysql.com (repo.mysql.com)|104.76.84.199|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25820 (25K) [application/x-redhat-package-manager]
Saving to: ‘mysql80-community-release-el7-1.noarch.rpm’

100%[=================================================================================================================>] 25,820      --.-K/s   in 0.003s  

2020-10-03 08:22:41 (8.12 MB/s) - ‘mysql80-community-release-el7-1.noarch.rpm’ saved [25820/25820]

[opc@instance-20201003-1526 ~]$ sudo rpm -ivh mysql80-community-release-el7-1.noarch.rpm
경고: mysql80-community-release-el7-1.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:mysql80-community-release-el7-1  ################################# [100%]
   
[opc@instance-20201003-1526 ~]$ sudo yum install mysql-server
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
 * epel: d2lzkl7pfhq30w.cloudfront.net
 * extras: mirror.kakao.com
 * updates: mirror.kakao.com
mysql-connectors-community                                                                                                          | 2.5 kB  00:00:00     
mysql-tools-community                                                                                                               | 2.5 kB  00:00:00     
mysql80-community                                                                                                                   | 2.5 kB  00:00:00     
(1/3): mysql-tools-community/x86_64/primary_db                                                                                      |  76 kB  00:00:00     
(2/3): mysql-connectors-community/x86_64/primary_db                                                                                 |  62 kB  00:00:00     
(3/3): mysql80-community/x86_64/primary_db                                                                                          | 115 kB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package mysql-community-server.x86_64 0:8.0.21-1.el7 will be installed
--> Processing Dependency: mysql-community-common(x86-64) = 8.0.21-1.el7 for package: mysql-community-server-8.0.21-1.el7.x86_64
--> Processing Dependency: mysql-community-client(x86-64) >= 8.0.11 for package: mysql-community-server-8.0.21-1.el7.x86_64
--> Running transaction check
---> Package mysql-community-client.x86_64 0:8.0.21-1.el7 will be installed
--> Processing Dependency: mysql-community-libs(x86-64) >= 8.0.11 for package: mysql-community-client-8.0.21-1.el7.x86_64
---> Package mysql-community-common.x86_64 0:8.0.21-1.el7 will be installed
--> Running transaction check
---> Package mysql-community-libs.x86_64 0:8.0.21-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===========================================================================================================================================================
 Package                                     Arch                        Version                              Repository                              Size
===========================================================================================================================================================
Installing:
 mysql-community-server                      x86_64                      8.0.21-1.el7                         mysql80-community                      499 M
Installing for dependencies:
 mysql-community-client                      x86_64                      8.0.21-1.el7                         mysql80-community                       48 M
 mysql-community-common                      x86_64                      8.0.21-1.el7                         mysql80-community                      617 k
 mysql-community-libs                        x86_64                      8.0.21-1.el7                         mysql80-community                      4.5 M

Transaction Summary
===========================================================================================================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 551 M
Installed size: 2.5 G
Is this ok [y/d/N]: y
Downloading packages:
경고: /var/cache/yum/x86_64/7/mysql80-community/packages/mysql-community-common-8.0.21-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Public key for mysql-community-common-8.0.21-1.el7.x86_64.rpm is not installed
(1/4): mysql-community-common-8.0.21-1.el7.x86_64.rpm                                                                               | 617 kB  00:00:00     
(2/4): mysql-community-libs-8.0.21-1.el7.x86_64.rpm                                                                                 | 4.5 MB  00:00:04     
(3/4): mysql-community-client-8.0.21-1.el7.x86_64.rpm                                                                               |  48 MB  00:00:15     
(4/4): mysql-community-server-8.0.21-1.el7.x86_64.rpm                                                                                                                                                                          | 499 MB  00:01:44     
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                                                                 5.0 MB/s | 551 MB  00:01:49     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
Importing GPG key 0x5072E1F5:
 Userid     : "MySQL Release Engineering "
 Fingerprint: a4a9 4068 76fc bd3c 4567 70c8 8c71 8d3b 5072 e1f5
 Package    : mysql80-community-release-el7-1.noarch (installed)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
Is this ok [y/N]:  y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : mysql-community-common-8.0.21-1.el7.x86_64                                                                                                                                                                                               1/4 
  Installing : mysql-community-libs-8.0.21-1.el7.x86_64                                                                                                                                                                                                 2/4 
  Installing : mysql-community-client-8.0.21-1.el7.x86_64                                                                                                                                                                                               3/4 
  Installing : mysql-community-server-8.0.21-1.el7.x86_64                                                                                                                                                                                               4/4 
  Verifying  : mysql-community-server-8.0.21-1.el7.x86_64                                                                                                                                                                                               1/4 
  Verifying  : mysql-community-client-8.0.21-1.el7.x86_64                                                                                                                                                                                               2/4 
  Verifying  : mysql-community-common-8.0.21-1.el7.x86_64                                                                                                                                                                                               3/4 
  Verifying  : mysql-community-libs-8.0.21-1.el7.x86_64                                                                                                                                                                                                 4/4 

Installed:
  mysql-community-server.x86_64 0:8.0.21-1.el7                                                                                                                                                                                                              
Dependency Installed:
  mysql-community-client.x86_64 0:8.0.21-1.el7  mysql-community-common.x86_64 0:8.0.21-1.el7 mysql-community-libs.x86_64 0:8.0.21-1.el7                                       

Complete!

자세한 설치는 CentOS 7.x 에서 MySQL 8.x 설치하기 참조.
 
사용된 mysql 설정 : /etc/my.cnf
데이터베이스 및 계정 생성 스크립트 : database-mysql.sql 

VM 인스턴스  공인 IP 및 방화벽 설정

mysql 서버가 설치된 인스턴스를 외부에서 사용할 수 있도록 공인 IP 와 방화벽 설정을 추가했다.

❶ 인스턴스에 공인 IP 를 할당하기 위하여  네크워킹> IP 관리 메뉴에서 새로운 공인 IP 주소를 예약한다. (Reserve Public IP Address)






❷ 컴퓨트 > 인스턴스 > 인스턴스 세부정보 > 연결된 VNIC(Virtual Network Interface Cards) 메뉴에서 새로운 VNIC 추가하여 인스턴스에 공인 IP 를 할당한다.




❸ 컴퓨트 > 인스턴스 > 인스턴스 세부정보 에서 공용 서브넷 을 클릭하여 공용 서브넷 관리 화면으로 이동한다.



디폴트로 생성되어 있는 보안 목록을 클릭하고 


MySql 서버에 대한 외부 접속 허용을 위하여 3306 포트에 대한 수신 규칙을 추가한다.
 


이로써 3306 포트로 외부에서 MySql 서버에 대한 통신이 허용된다. 

MySql Workbench 에서 접속한 화면 예시

MySql Workbench 에서 접속한 화면 예시


2019년 5월 21일

MySQL 8.x 에서 루트 암호를 재설정하기 (CentOS 7.6)


https://support.rackspace.com/how-to/mysql-resetting-a-lost-mysql-root-password/

CentOS 에서는  mysqld_safe 명령이 존재하지 않아 실행할 수 없어 아래와 같은 방식으로 처리할 수 있었다.

⓵ SSH 를 이용하여 서버에 로그인한다. (root  계정)

⓶ mysqld 서버를 중지한다.

systemctl stop mysqld
⓷ --skip-grant-tables 옵션을 설정한다.

systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

⓸ mysqld 서버를 시작한다.

systemctl start mysqld

⓹ 다음 명령으로 비밀번호 입력없이 root 사용자로  mysql 에 로그인한다.

mysql -u root

⓺ 비밀번호를 변경한다.


UPDATE mysql.user SET Password=PASSWORD('NEW-PASSWORD') WHERE User='root';

-- 로걸호스트의 경우 비밀번호를 사용하지 않도록 하기 위해서는 아래와 같이 변경한다.

UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost';

flush privileges;

exit;


⓻  --skip-grant-tables 옵션을 제거 하고 mysqld 를 시작한다.

systemctl unset-environment MYSQLD_OPTS
systemctl start mysqld

2018년 12월 23일

CentOS 7.x 에서 MySQL 8.x 설치하기

1. MySQL 설치하기

MySQL 을 yum 명령을 사용하여 설치하는 것은, 사실은 MariaDB 를 설치하는 것이다. 설치를 위하여 먼저 MySQL패키지 정보를 제공하는 MySQL community Yum Repository 사이트를 방문해야 한다.



설치를 원하는 패키지 이름을 선택한 다음 다운로드를 위한 링크를 아래와 같이 완성한다.

#wget http://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm

아래와 명령으로 먼저 레파지토리를 추가한다.
#sudo rpm -ivh mysql80-community-release-el7-1.noarch.rpm

이제 MySQL 서버를 설치한다.
# yum install mysql-server

2. MySQL 시작하기

MySQL 서버는 다음 명령으로 시작한다.
# systemctl start mysqld
시작이후에는 다음 명령으로 서버 상태를 확인할 수 있다.
# systemctl status mysql



서버 설치 과정에서 임시 비밀번호가 생성되는데 이는 아래의 명령으로 확인할 수 있다.
# grep 'temporary password' /var/log/mysqld.log

3. MySQL 설정

MySQL 기본적으로 조금은 안전하지 않는 디폴트 설정(원격 )을 위한 보안 관련 옵션들 설정을 위한 보안 스크립트를 제공하고 있는데 아래와 같은 명령으로 실행할 수 있다.


 /usr/bin/mysql_secure_installation


스크립트를 실행하면 새로운 root 비밀번호 설정, 원격 익명 사용자 계정 제거, 로컬 이외의 곳에서 root접근 비활성, 데트트 데이터베이스 제거를 선택할 수 있다. 비밀번호는 12자리 이며 1이상의 대문자 + 1개이상의 소문자 + 1개이상의 숫자 + 1개이상의 특수문자조합으로 생성해야 한다.

자세한 건 다음 링크를 참고한다.
MySQL Reference Manual



추가로 다음의 명령을 통하여 원격 접속을 위한 방화벽을 설정한다. 

#firewall-cmd --zone=public --permanent --add-service=mysql


4. MySQL 테스트 하기

설치 및 설치 정보를 확인하기 위하여 mysqladmin 도구를 사용하여 접속한다.
#mysqladmin -u root -p version
다음과 유사한 메시지를 보게된다.
mysqladmin  Ver 8.0.13 for Linux on x86_64 (MySQL Community Server - GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version  8.0.13
Protocol version 10
Connection  Localhost via UNIX socket
UNIX socket  /var/lib/mysql/mysql.sock
Uptime:   21 hours 59 min 10 sec

Threads: 2  Questions: 13095  Slow queries: 0  Opens: 395  Flush tables: 2  Open tables: 222  Queries per second avg: 0.165

4. MySQL 계정생성 하기

 이제 새로운 데이터베이스와 계정을 생성한다. 여기에서는 데이터베이스 이름은  testdb , 새로운 사용자 이름은  testuser , 그리고  비밀번호는 password 를 사용했다. 먼저 아래와 같이 MySQL shell 을 실행한다.

mysql -u root -p

이제 아래와 같은 스크립트를 사용하여 데이터베이스 및 사용자를 생성한다.
-- testdb 생성
CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- test 계성 생성
CREATE USER 'test'@'%' IDENTIFIED BY 'password';
-- testdb에 대한 권한을 test 에게 부여한다. 
GRANT ALL PRIVILEGES ON testdb.* TO 'test'@'%' WITH GRANT OPTION;



이제 클라언트에서 새롭게 생성한 계정으로 접속을 한다. 프로그램은 "MySQL Workbench"를 사용했다.
접속시에 아래와 같은 오류가 발생하는 경우 두가지 방법인 있다. 이는 MySQL 8.x버전부터는 caching_sha2_password 을 지원하고 있는데 이전 버전의 클라이언트 버전들은 지원하고 있지 않아서다.

authentication plugin 'caching_sha2_password'
cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2):
image not found

  1. 서버에 default-authentication-plugin=mysql_native_password 설정을 추가한다.
  2. "MySQL Workbench" 프로그램은 최신 버전으로 업데이트 한다.

이글에서는 클라이언트 버전을 최신 버전으로 업데이트 하여 사용하였다.


2018년 12월 1일

CentOS 에서 nmon 을 이용한 시스템 성능 분석

1. nmon 설치하기

Redhat 계열의 CentOS에서 nmon 설치는 다음과 같이 yum 을 사용하여 설치할 수 있다.
# yum install nmon
CentOS 7.x 환경에 nmon 패키지를 찾을 수 없는 경우 널리 사용되는 EPEL (Extra Packages for Enterprise Linux) 레파지토리를 아래와 같은 명령을 사용하여 추가하고 nmon 패키지를 설치하면 된다.
# yum install epel-release
nmon 은 커멘드 기반의 성능모니터링 툴로 설치 후  nmon 명령 입력하여 사용하여 실행할 수 있다.



아래의 키를 입력하면 해당하는 정보를 실시간으로 모니터링 할 수 있다. 프로그램 종료는 q 를 입력한다.

  1. m = Memory
  2. j = Filesystems
  3. d = Disks
  4. n = Network
  5. V = Virtual Memory
  6. r = Resource
  7. N = NFS
  8. k = kernel
  9. t = Top-processes
  10. . = only busy disks/procs


2. nmon 데이터 캡처 모드

nmon 을 이용한 실시간 모니터링도 가능하지만 아래와 같은 명령을 사용하여 성능데이터를 캡처하여 분석할 수도 있다.
# nmon -f -s13 -c 30

  1. -f : 출력하지 않고 로그로 남기겠다는 의미.
  2. -s13 : 13 초 단위로 데이터를 캡처하겠다는 의미.
  3. -c 30 : 데이터 캡처 횟수를 의미.
즉 13초 단위로 성능 데이터를 캡처하여 30회 로그로 남기겠다는 의미가 된다. 파라메터 값을 목적에 따라 수정하여 사용하면 된다.

다음은 3일동안 5분간격으로 데이터를 캡처하고자 한다면 아래와 같이 명령을 실행한다.

# nmon -f -s300 -c 30
위의 명령을 실행하면 db2_[yymmdd]_[hhmm].nmon 형식의 이름으로 파일이 생성되고 데이터가 저장되게 된다.


3. nmon analyzer

이렇게 생성된 로그는 엑셀로 구현된  "nmon analyzer" 를 사용하여 쉽게 성능 분석이 가능하다.

"nmon analyzer" 은 다음의 링크에서 무료 다운로드가 가능하며 excel 만 있다면 다른 도구 없이 바로 분석이 가능하다.






nmon_analyser : 사이트를 방문하여 다운로드 또는 아래 링크를 클릭하여 다운로드.

4. nmon analyzer  을 이용한 캡처된 데이터 분석하기 

① 다운로드한 nmon analyser v55.xlsm 파일을 클릭하여 프로그램을 실행하고



② "Analyze nmon data" 버튼을 클릭하여 nmon 에 의하여 캡처된 데이터 파일을 선택하면 분석이 진행된다.



③ 작업이 완료되면 분석 결과 엑셀을 저장하기 위하여 "다음이름으로 저장" 창이 보여지고 "저장"을 클릭하면 분석 결과 엑셀파일이 만들어 진다.


참고자료

nmon analyser -- A free tool to produce AIX performance reports
Nmon: Analyze and Monitor Linux System Performance