Lovetoken

저는 개발 취향을 가진 데이터 분석가 Jr. 입니다.

Navigation
 » Home
 » About Me
 » Github

인터넷 접속이 안되는 CentOS 머신에서 Python3 및 패키지 설치하기

22 Oct 2017 » Python



본 글은 CentOS 최소설치버전으로 설치된 서버에서 (내부망 운용등의 이유로)인터넷 접속이 불가한 상황일 때 Python3 및 패키지를 설치하는 법에 대해 설명하기 위한 글이다.
패키지의 예시는 konlpy 이다.



가상환경 준비

설명을 위하여
설치의 대상이 되는 CentOS 최소설치 환경을 똑같이 재현할 필요가 있다.
CentOS 최소설치가 된 가상환경을 Docker 을 통해 준비해 보았다.
(Docker를 모른다면 본 장은 설명을 위한 CentOS 환경을 그대로 재현하기 위함이구나 하고 넘어가면 되겠다)

$ docker run -it centos /bin/bash

CentOS 최소설치버전 이미지 다운로드한 후 컨테이너 실행하여 /bin/bash 를 실행해 CentOS 쉘로 접속하게 된다.
접속된 환경은 인터넷이 가능한 상황이지만, 인터넷이 안되는 상황을 전제하에 Python3 및 konlpy 패키지를 수동으로 설치해 볼 것이다.



Python3 설치파일 준비

이제부턴 CentOS 쉘에서의 상황임을 염두해 둔다.

$ yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ yum search python36

IUS Community Project의 리포지토리를 yum의 리포지토리에 추가한 후 python36 검색해 본다.
"python36" 으로 시작되는 다양한 리스트들이 출력될 것이다.
참고로 yum 의 -y 옵션 의미는 무조건 Yes로 입력하여 설치를 진행토록 하는 의미이다.

$ mkdir ~/python3
$ cd ~/python3

적당한 곳에 python3 디렉토리를 만들고 그곳으로 간다.

$ yum install -y --downloadonly --downloaddir=. python36u python36u-libs python36u-devel python36u-pip

Python3.6 버전대 패키지들을 설치하지 않고 다운로드만 하는 명령어이다. 1
위 명령어를 실행하면 관련된 패키지들의 rpm 을 워킹디렉토리(~/python3)에 저장하게 된다.

[root@e1e70169f547 python3]# ll
-rw-r--r-- 1 root root   56192 Aug  3 04:20 python36u-3.6.2-1.ius.centos7.x86_64.rpm
-rw-r--r-- 1 root root  204112 Aug  3 04:20 python36u-devel-3.6.2-1.ius.centos7.x86_64.rpm
-rw-r--r-- 1 root root 9689852 Aug  3 04:20 python36u-libs-3.6.2-1.ius.centos7.x86_64.rpm
-rw-r--r-- 1 root root 1841528 Feb  3  2017 python36u-pip-9.0.1-1.ius.centos7.noarch.rpm
-rw-r--r-- 1 root root  663324 Mar 22  2017 python36u-setuptools-33.1.1-1.ius.centos7.noarch.rpm

실제로 확인해 볼 경우 5개의 rpm 파일들이 준비된 것을 확인할 수 있다.



konlpy 패키지 리소스 준비

파이썬의 패키지를 준비하기 위해선 pip 를 이용하는것이 좋다.
pip 를 이용하기 위해서 방금 받은 rpm 을 이용해 파이썬을 설치한다.

$ yum install -y *

정상적으로 설치되면 이때부터 python3.6, pip3.6 명령어를 이용할 수 있게 된다.

$ mkdir packages
$ cd packages

적당히 ~/python3/packages 디렉토리를 만들고 그곳으로 가자.

$ pip3.6 install --download=. tag
$ pip3.6 install --download=. konlpy
$ pip3.6 install --download=. JPype1

위 명령어 중 첫번째는 tag package 에 대한 리소스 압축파일 (.tag.gz) 을 포함한 의존성이 있는 리소스를 모두 현 워킹디렉토리에 저장만 한다.
즉 패키지들이 설치되지는 않는다.
konlpy 와 JPype1 패키지 역시 마찬가지로 리소스를 준비시킨다.

[root@e1e70169f547 package]# ll
-rw-r--r-- 1 root root   147893 Oct 20 00:51 JPype1-0.6.2.tar.gz
-rw-r--r-- 1 root root    38404 Oct 20 00:52 intervaltree-2.1.0.tar.gz
-rw-r--r-- 1 root root 22454979 Oct 20 00:52 konlpy-0.4.4-py2.py3-none-any.whl
-rw-r--r-- 1 root root    32267 Oct 20 00:52 sortedcontainers-1.5.7-py2.py3-none-any.whl
-rw-r--r-- 1 root root    34414 Oct 20 00:52 tag-0.3.3.tar.gz

package 리소스 파일들이 준비되어 있는것을 확인할 수 있다.



인터넷이 불가한 CentOS 에서의 python3.6, packages 설치

인터넷이 불가했던 머신으로 시점을 옮긴다.
인터넷 접속이 안되었던 CentOS 서버에서 위에서 준비한 rpm, package 리소스들을 물리적으로 복사하여 가져온다.

본 예제의 경우 Docker 가상환경을 기준으로 설명했는데
컨테이너 안에서 빠져나온 후 (exit 로 빠져나올 수 있음)

$ docker cp <컨테이너명>:~/python3/ <호스트 경로>

의 방식으로 가상환경에 있던 rpm, package 리소스 들을
호스트로 떨어트린 후 USB 메모리등을 이용해 복사하여 인터넷이 불가한 CentOS 서버머신에 복사하면 되겠다.
참고로 컨테이너 명은 docker ps -a 를 통해 확인이 가능하다.
아래 docker cp 명령어는 나의 컴퓨터에 꽂혀 있는 USB 메모리로 리소스들을 복사하는 예이다.

$ docker cp e1e70169f547:~/python3/ /Volumes/lovetoken_usb/

(이외의 docker 를 이용하지 않은 상황에선 각자 상황에 따라 대처... 자세한 설명은 생략)

자 이제부터는 인터넷이 불가한 CentOS 서버상황이라고 가정한다.
편의상 ~/python3 에 복사한 것을 붙어넣었다고 가정하겠다.

$ cd ~/python3

복사한 python3 폴더로 간다.

$ yum install -y python36u-3.6.2-1.ius.centos7.x86_64.rpm python36u-devel-3.6.2-1.ius.centos7.x86_64.rpm python36u-libs-3.6.2-1.ius.centos7.x86_64.rpm python36u-pip-9.0.1-1.ius.centos7.noarch.rpm python36u-setuptools-33.1.1-1.ius.centos7.noarch.rpm

이 명령어를 통해서
yum 은 원격레파지토리를 검색하지 않고 ~/python3 에 있는 rpm 에 의존하여 파이썬을 설치하기 시작한다.
즉 수동으로 설치가 되는것이다.
역시 정상적으로 설치되면 python3.6, pip3.6 을 실행할 수 있다.

$ cd packages

~/python3/packages 폴더로 가서 이젠 konlpy 패캐지 설치를 시도할 것이다.

pip3.6 install *

이 명령어를 통해서 인터넷 연결없이 konlpy 관련 패키지들을 수동설치하게 된다.


  1. 덧붙임 : Ubuntu 에선 apt-get -d install <package name> 으로 설치하지 않고 .deb 파일들을 다운로드만 할 수 있다