Skip to Content
Data Engineering폐쇄망 JupyterHub 설치에 필요한 패키지 준비
📊 Data Engineering2018년 1월 23일

폐쇄망 JupyterHub 설치에 필요한 패키지 준비

#jupyter#centos#offline#yum#pip#data-engineering#flamingo

인터넷에 연결할 수 없는 서버에 JupyterHub를 설치하면서 패키지를 미리 준비한 기록입니다. Python 패키지만 가져가면 끝나는 작업은 아니었습니다. OS 패키지와 Node.js, Configurable HTTP Proxy의 의존성도 필요했습니다.

당시 사용한 버전은 Python 3.6 계열, Node.js 8.9.4, Configurable HTTP Proxy 3.1.1입니다. 현재 설치를 위한 버전 선택과는 구분해야 합니다.

OS 패키지와 로컬 저장소

당시에는 RPM을 로컬 디렉터리에 모으고 YUM 저장소를 등록했습니다. 로컬 저장소로 사용하려면 RPM 파일뿐 아니라 저장소 메타데이터도 준비해야 합니다.

다음은 저장소 위치를 바꾼 설정 예시입니다. 패키지 서명을 검증할 키가 등록돼 있어야 합니다.

ini
local.repo
[local-repo] name=Local Repository baseurl=file:///srv/offline-repo enabled=1 gpgcheck=1

당시 메모에는 gpgcheck=0이 있었지만, 패키지 서명 검증을 끄는 설정이어서 이 글의 예시에서는 제외했습니다. 실제 환경에서 패키지 출처와 서명 검증 방법을 함께 준비해야 합니다.

bash
yum --disablerepo='*' --enablerepo=local-repo repolist

저장소를 확인한 뒤 대상 OS와 버전에 맞는 Python·Node.js 패키지와 의존성을 설치합니다. 당시에는 python36u 계열과 nodejs-8.9.4를 사용했습니다.

Configurable HTTP Proxy 준비

JupyterHub의 프록시도 Node.js 패키지와 의존성을 필요로 합니다. 당시에는 프록시 파일을 /usr/lib/node_modules/configurable-http-proxy 아래에 배치하고 실행 파일을 연결했습니다.

bash
ln -s /usr/lib/node_modules/configurable-http-proxy/bin/configurable-http-proxy \ /usr/bin/configurable-http-proxy

이 명령은 대상 파일과 의존성이 이미 준비된 뒤의 연결 단계입니다. npm pack으로 만든 압축 파일 하나에 모든 의존성이 포함된다고 가정하면 안 됩니다. 반입할 파일에 실행에 필요한 모듈이 실제로 들어 있는지 확인해야 합니다.

Python 패키지 오프라인 설치

당시에는 Jupyter와 JupyterHub 패키지를 디렉터리별로 나눠 설치했습니다. SQLAlchemy, Mako, alembic 같은 의존성도 별도로 다뤘습니다.

아래는 로컬 패키지 디렉터리와 고정한 의존성 목록을 사용하는 예시입니다. 당시 전체 버전 목록을 재현한 파일은 아닙니다.

bash
python -m pip install --no-index --find-links ./wheelhouse -r requirements.txt

--no-index는 온라인 인덱스를 사용하지 않게 하고, --find-links는 설치 파일을 찾을 위치를 지정합니다. pip 설치 문서 에서 확인할 수 있습니다.

소스 배포 파일만 준비하면 설치 중 컴파일러나 빌드 의존성이 추가로 필요할 수 있습니다. 가능하면 대상 OS·아키텍처·Python에 맞는 wheel을 준비하고, 반입 전에 네트워크를 사용하지 않는 설치가 되는지 확인하는 편이 좋습니다.

실행 파일까지 확인

패키지 설치가 끝나면 Python에서 모듈을 읽는지와 프록시 실행 파일을 찾는지를 각각 확인해야 합니다. Hub가 실행돼도 사용자 서버를 시작하지 못하는 경우가 있어, 실제 사용자 서버를 띄우는 과정까지 이어서 봐야 합니다.

다른 서버에서 같은 구성을 준비하려면 버전 목록과 설치 파일, 저장소 설정을 함께 남기는 것이 도움이 됩니다. 명령만 남겨 두면 다음 설치에서 다른 의존성을 받거나 일부 파일을 빠뜨리기 쉽습니다.

Last updated on