개요

DNN을 활용한 얼굴인식 프로그램을 제작하기 위해 Linux 내에서 환경설정이 필요했다.
Python 버전을 3.9.16으로 업그레이드하고 AI 및 데이터베이스 작업에 필요한 라이브러리, 즉 OpenCV와 MySQL Connector를 설치하는 방법에 대해 알아보자.

Python 3.9.16으로 업그레이드하기


첫 번째 단계는 Python 3.9.16으로 업그레이드하는 것이다.

해당 버전은 AI 라이브러리 cv2와 데이터베이스 작업을 이용하기 위해 필요하다. 아래 절차를 따라해보자.

1. 현재 Python 버전 확인

python --version


2. 리눅스 배포판의 패키지 목록 업데이트

sudo apt update

Linux 배포판에서 패키지 목록을 업데이트하는 명령어.

이 명령어로 설치 가능한 패키지들의 최신 버전 정보를 알 수 있다.

 

3. 설치된 패키지를 최신 버전으로 업그레이드

sudo apt upgrade

 

4. Python 컴파일 및 설치하기 위해 필요한 패키지 설치

sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev

 

5. Python 3.9.16의 소스 코드 다운로드

wget https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz

Python 3.9.16의 소스 코드를 다운로드하는 명령어이다.

해당 명령어를 사용하면 별도의 tgz파일 다운로드 및 이동 없이 바로 활용 가능하다.

 

6. 다운로드한 소스 코드 파일 압축 해제

tar -xf Python-3.9.16.tgz


7. Python 3.9.16 소스 코드가 있는 디렉토리로 이동

cd Python-3.9.16


8. Python 컴파일하기 전 설정

./configure --enable-optimizations

--enable-optimizations는 최적화를 적용하여 Python을 컴파일하는 옵션이다.


9. 소스 코드 컴파일

make -j $(nproc)

-j $(nproc) 은 사용 가능한 CPU 코어를 최대한 활용하여 컴파일하는 것을 가능하게 하는 옵션이다.


10. 컴파일된 Python 설치

sudo make altinstall

altinstall는기본 Python 바이너리를 대체하지 않고 새로운 버전을 설치하는 옵션이다.


11. /usr/bin/python으로 설정된 이전 Python 바이너리를 삭제

sudo rm /usr/bin/python

기존 바이너리를 삭제해야 기존 버전과 겹쳐서 나는 이슈를 없앨 수 있다.

 

12. 새로 설치한 Python 3.9를 /usr/bin/python에 연결

sudo ln -s /usr/local/bin/python3.9 /usr/bin/python

이렇게 하면 python 명령어를 입력했을 때 Python 3.9가 실행된다.

 

13. 3.9.16 버전으로 업그레이드 된 Python 버전 확인

python --version

 

OpenCV 설치하기


OpenCV는 수백 가지 컴퓨터 비전 알고리즘을 포함한 강력한 오픈소스 라이브러리이다.

AI 구현 혹은 활용하기 위해 필요하다. 아래 절차를 따라해보자.

1. 기존의 libapache2-mod-php7.3 패키지 삭제

sudo apt purge libapache2-mod-php7.3

OpenCV라이브러리를 설치할 때 libabache2 패키지가 최신으로 돼있지 않으면 오류가 날 경우가 있다.

따라서 기존 설치된 것을 삭제하고 재설치 하는 작업이 필요하다.

해당 명령어는 libapache2-mod-php7.3 패키지를 시스템에서 완전히 제거하는 명령어이다.

'purge'는 패키지를 삭제할 뿐만 아니라, 그와 관련된 설정 파일까지 모두 제거한다.


2. libapache2-mod-php7.3 패키지 다시 설치

sudo apt install libapache2-mod-php7.3

참고 : 이 패키지는 Apache 웹 서버에서 PHP 7.3을 사용할 수 있게 해주는 모듈이다.


3. OpenCV 라이브러리의 Python 3 바인딩을 설치합니다

sudo apt install python3-opencv


4. Python 패키지 관리자인 pip를 설치합니다

sudo apt install python-pip

pip를 이용하면 다양한 Python 패키지를 손쉽게 설치할 수 있다.


5. opencv-contrib-python 패키지 설치

pip install opencv-contrib-python

 

이 패키지는 OpenCV의 주요 기능뿐만 아니라, 추가적인 기능들을 제공한다.

코드 내부 cv2 라이브러리를 사용하기 위해 설치한다.

 

MySQL Connector 설치하기


MySQL Connector/Python은 MySQL에서 제공하는 표준화된 데이터베이스 드라이버이다.

AI를 통해 얻은 결과물을 데이터베이스에 저장하는 데 활용할 수 있다. 아래 명령어를 통해 설치할 수 있다.

pip install mysql-connector-python



결론


이제 Python 3.9.16으로 업그레이드하고 AI 및 데이터베이스 작업을 위한 핵심 라이브러리를 설정했다. 다음 단계로는 AI 및 데이터베이스 프로젝트를 만들어 보는 것이 있겠다. 행복한 코딩이 되길 바란다!

설치가 정상적으로 되었는지 확인하기 위해 Python 스크립트에서 모듈을 임포트해보면 좋다. 에러가 발생하지 않는다면, 모두 준비된 것이다.

 

 

반응형

개요

 

1. https ssh 인증서 발급 이유 (추후 올릴 예정)

2.  Let's Encrypt  SSL 인증서 발급 방법

  • webroot
    • 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급하는 방법
    • 실제 작동하고 있는 웹서버의 특정 데렉토리의 특정 파일 쓰기 작업을 통해서 인증
    • 장점 : nginx를 중단시킬 필요 X
    • 단점 : 인증 명령에 하나의 도메인 인증서만 발급 가능
  • 웹서버
    • Nginx나 아파치와 같은 웹서버에서 직접 SSL 인증을 실시하고 웹서버에 맞는 SSL세팅값을 부여
    • 발급이나 갱신을 위해 웹서버를 중단시킬 필요가 없음
    • 인증서 갱신 시 상황에 맞게 세팅을 자동으로 업데이트
    • 사용자가 세팅을 변경할 수 있지만 자동 업데이트 시 반영되지는 않음
  • Standalone
    • 사이트 작동을 멈추고 이 사이트의 네크워킹을 이용해 사이트 유효성을 확인해 Let’s Encrypt SSL 인증서를 발급하는 방식
    • 80 포트로 가상 staandalone 웹서버를 띄워 인증서를 발급
    • 장점 : 동시에 여러 도메인을 발급받을 수 있음
    • 단점 : 발급 전에 Nginx를 중단하고 발급 완료 후 다시 Nginx를 시작해야 함
  • DNS
    • 도메인을 쿼리해 확인되는 TXT 레코드로 사이트 유효성을 확인하는 방법
    • 와일드카드 방식으로 인증서를 발급 가능
    • 서버 관리자가 도메인 DNS를 관리/수정할 수 있어야 함
    • 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 함
    • 외부에서 TXT 레코드를 입력할 수 있도록 DNS가 API를 제공하는 경우만 갱신 과정을 자동으로 처리

 

방법

 

1. Let's Encrypt 설치하기

  • 깃 사용을 위한 설치 (있으면 패스)
$sudo apt-get update
$sudo apt-get install git bc

 

  • 깃에서 Let's Encrypt 다운로드
$sudo git clone https://github.com/letsencrypt/letsencrypt [설치할 디렉토리]

 

뒤에 한칸 띄고 설치할 디렉토리 경로를 적어준다. ex) /opt/letsencrypt

 

2. 인증서 가져오기

 

Let's Encrypt 의 인증 방식인 Standalone plugin 은 서버 인증을 위해서 80 포트를 이용한다.

따라서 nginx, apache 와 같이 80 포트를 이용하는 서비스가 있다면 서버를 일시적으로 정지시켜줘야 한다.

정지하지 않으면 아래와 같은 오류가 발행한다.

  • 서버 정지
$sudo service nginx stop

 

서버가 정지됐는지 확인도 해본다.

$netstat -na | grep '80.*LISTEN'

 

  • cd를 통해 letsencrypt 설치한 디렉토리로 이동 (1번에서 지정한 디렉토리)
  • Standalone plugin 활용하여 인증서 발급
$sudo letsencrypt certonly -a standalone -d [발급받을 도메인]

발급받을 도메인이 여러 개라면

$sudo letsencrypt certonly -a standalone -d [발급받을 도메인1] -d [발급받을 도메인2] -d [발급받을 도메인3]

이처럼 여러 개도 지정 가능하다.

위 명령어를 실행한 이후 이메일을 작성하라 한다.

긴급 통보 혹은 키 복구를 위해 사용되니 실제 메일 받을 이메일을 적으면 된다.

이후 이용약관에 동의하라는 < Agree > 버튼이 나오면 선택한다.

위 사항을 완료하면 /etc/letsencrypt/live/도메인/ 디렉토리에 pem 파일이 생긴다.

live 디렉토리

도메인은 위에 -d 뒤에 작성한 도메인이다.

pem 파일

  • cert.pem : 도메인 인증서
  • chain.pem : Let's Encrypt chain 인증서
  • fullchain.pem : cert.pem 과 chain 인증서 합본
  • privkey.pem : 개인키

 

3. jks 생성하기

ssl 인증서 저장소인 jks를 생성한다.

java 기반 서버 코드 연동 시 해당 키 스토어의 키가 필요하다.

앞서 만든 pem으로 만들면 된다.

$sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out cert_and_key.p12 -CAfile chain.pem -caname [유저아이디]

 

위 구문을 실행하면 아래와 같이 도메인 폴더에 p12파일이 생긴다.

 

p12파일은 PKCS#12 파일로써 공개키 기반 구조 (PKI, Public Key Infrastructure)에서

인터넷을 이용해 안전하게 정보를 교환하기 위한 제조사간 비공식 표준 프로토콜이다.

$sudo keytool -importkeystore -destkeystore keyStore.jks -srckeystore cert_and_key.p12 -srcstoretype PKCS12

 

그다음 위 구문을 실행하면 키를 비대칭 암호화 시스템 기반으로 jks를 만들어준다.

암호를 입력하라는 구문이 나오면 사용할 암호를 입력하면 된다.

해당 암호는 이후 java keystore password로 쓰인다.

아래와 같이 도메인 폴더에 jks 파일이 생성된다.

 

4. NginX에 SSL 설정하기

/etc/nginx/sites-available/ 폴더에 가면 도메인 이름의 파일이 있을 것이다.

nano로 해당 파일을 연 다음

server {
		# 사용할 포트 적어주면 된다.
        listen 7000 ssl;
        listen [::]:7000 ssl;

	[도메인 ,로 여러개 써도됨];

        root frontend 파일 위치;
        index index.html;

	ssl_certificate /etc/letsencrypt/live/도메인/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/도메인/privkey.pem;	

    location ~* \.(?:manifest|appcache|html?|xml|json)$ {
      expires -1;
      # access_log logs/static.log; # I don't usually include a static log
    }

    location ~* \.(?:css|js)$ {
      try_files $uri =404;
      expires 1y;
      access_log off;
      add_header Cache-Control "public";
    }

    # Any route containing a file extension (e.g. /devicesfile.js)
    location ~ ^.+\..+$ {
      try_files $uri =404;
    }

    # Any route that doesn't have a file extension (e.g. /devices)
    location / {
        try_files $uri $uri/ /index.html;
    }
}

 

해당 구문을 작성한다.

포트는 자유로이 설정하고 도메인은 위에 넣었던 도메인을 넣어주면 된다.

이후 nginx를 restart 하면 적용된다!

반응형

 

개요

 

리눅스 운영체제에는 데비안 계열, 레드햇 계열, 슬렉웨어 계열이 있다.

각 계열마다 설치 방법이 다르기 때문에 나의 OS를 확인한 후에 알맞게 설치해야한다.

필자는 데비안 10을 이용 중인데 레드햇 계열인 cent OS로 했기 때문에 재설치해야 했다.

여기서는 데비안 계열에서의 MySQL설치를 다룬다.

 

방법

 

1. MySQL 매니징 소프트웨어 추가하기

MySQL 다운로드와 설정을 도와주는 매니저를 레포지토리에 추가한다.

$ cd /tmp
$ wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb
$ sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb

 

위 코드의 3번째 row까지 수행하면 아래 화면이 나온다.

OK를 누르면 알아서 최신 stable 버전으로 다운로드해준다.

다른 버전을 다운로드하고 싶다면 맨 위 항목에서 지정 가능하다.

최신 stable 버전으로 받는 것을 추천한다.

 

 

2. MySQL 설치하기

MySQL APT 패키지 캐시를 업데이트한 후 MySQL 서버 패키지를 설치한다.

$ sudo apt update
$ sudo apt install mysql-server

 

설치 도중 아래와 같이 비밀번호 입력 화면이 나온다.

MySQL의 root 계정 세팅으로 사용할 root 계정의 비밀번호를 입력해주면 된다.

 

 

그다음 아래와 같은 화면이 나오면 아래 방향키 누른 후 OK위에 커서 올라가면 엔터 누르면 된다.

 

그다음 나오는 화면은 추가 옵션 선택란이다. 뭐든 추천해주는 게 좋다. 추천하는 거 (위에꺼) 엔터 친다.

 

3. 설치 확인

$ sudo systemctl status mysql

 

위 구문을 입력했을 때 아래와 같은 화면이 뜬다면 잘 설치되고 돌아간다는 뜻이다.

 

$ sudo systemctl start mysql 
$ sudo systemctl restart mysql 
$ sudo systemctl stop mysql 
$ sudo systemctl reload mysql

 

위와 같이 4개의 커맨드로 끄고 키고 재시작할 수 있다.

끄면 아래와 같이 나타난다.

 

 

반응형

 

개요

 

원격으로 root 계정 직접 접속이 가능하면 해커에게 아무 방어선 없이 일차로 뚫릴 수 있는 여지를 준다.

타계정으로 로그인하고, 계정 전환(su)을 통해 root로 로그인하거나 권한 사용(sudo)으로 접근할 수 있도록

설정하여 방어선을 두는게 좋다.

 

방법

 

필자는 debian 10 환경에서 SSH 원격 접속 차단을 활용했다.

# vi /etc/ssh/sshd_config

를 통해 접속하면 Port 변경때 봤던 설정 소스가 나타난다.

Port 변경 참고

2021.07.06 - [Linux] - [Linux] 리눅스 ssh port 변경

 

[Linux] 리눅스 ssh port 변경

root 권한일 때를 예로 들겠습니다. 일반 유저일 때는 모든 구문 앞에 sudo를 붙이면 됩니다. 1. 현재 포트 확인 # cat /etc/ssh/sshd_config | egrep ^\#?Port 이와 같이 현재 포트 번호를 확인할 수 있다. 2...

gomgomkim.tistory.com

 

해당 소스코드에서 위와같이 PermitRootLogin 항목을 no로 주면 원겹접속이 차단된다.

 

반응형

+ Recent posts