Perl Python System engineering

how to create pip(python package manager),cpan(perl),cran(R) local mirror repository

안녕하세요.

금융, 연구소, 대학교 등 여러 중요시설 폐쇄망에서 Python, Perl, R  개발을 할 경우

외부인터넷과 연결되지 않아 , pip 나 cpanm 을 제대로 쓸 수 없어 어려움을 많이 겪곤 합니다. 이때 필요한 것이 local repository인데요.

이번에는 제일 대표적으로 많이 쓰이는 pypi, cpan, cran 에 대해서 local repository를 구축하는 방법을 알려드리고자 합니다.

 

1. simple 웹서버 설치 ( In Internet disconnected Site)

웹서버는 편하신 걸로 설치를 진행해 주시면 됩니다.

하지만 root 권한이 없어 local linux iso를 통해서 yum도 사용하실 수 없는 경우가 있습니다. 이 경우 웹서버 자체를 올리는 것도 일인데요.

저는 nignx를 compile 설치를 진행하였습니다.

아래 url 을 참조하시면 됩니다.

https://opentutorials.org/module/384/4511  ( 출처 오픈 튜토리얼)

당연히 root는 없기 때문에 80번은 쓸 수 없구요. 1024번 이상의 번호를 선택하시면 됩니다.

 

2. pypi , cpan, cran data 가져오기 ( External site which has been connected to internet)

(외부 인터넷이 연결된 망에서의 작업)

Peal)

 
# mkdir cpan
# cd cpan
# /usr/bin/rsync -av --delete cpan-rsync.perl.org::CPAN $your_path/cpan
# tar cvjfp cpan_backup.tgz *

copy cpan_backup.tgz file to local site ( internet diconnected site )

 

R)

# mkdir cran
# cd cran
# rsync -rtlzv --delete cran.r-project.org::CRAN $your_path/cpan
# tar cvjfp cran_backup.tgz *

copy cran_backup.tgz file to local site ( internet diconnected site )

 

Python 부분 mirror))

# yum install python-pip bzip2 -y

===================================================================================================================================================================================================
Package Arch Version Repository Size
===================================================================================================================================================================================================
Installing:
python2-pip noarch 8.1.2-5.el7 epel 1.7 M
Installing for dependencies:
python-backports x86_64 1.0-8.el7 base 5.8 k
python-backports-ssl_match_hostname noarch 3.4.0.2-4.el7 base 12 k
python-setuptools noarch 0.9.8-7.el7 base 397 k

Transaction Summary
======================================================================================================================

pip 명령을 사용하기 위하여 python-pip 패키지 설치 ( 해당 패키지는 epel Repository 에서 다운로드 받아야 함. )

$ pip install -U pip pip2pi setuptools

pip pip2pi setuptools 패키지 업데이트

#pip install –download /var/www/html kolla-ansible
kolla-ansible netaddr six setuptools pbr Jinja2 oslo.utils PyYAML oslo.config docker cryptography MarkupSafe pytz pyparsing debtcollector iso8601 funcsigs oslo.i18n netifaces monotonic stevedore rfc3986 backports.ssl-match-hostname docker-pycreds requests ipaddress websocket-client cffi enum34 asn1crypto idna wrapt Babel certifi chardet urllib3 django flask tensorflow opencv pycparser

 “/var/www/html” 경로에 kolla-ansible 패키설치에 필요한 파일들을 다운로드함 ( 의존성 포함. )

# dir2pi /var/www/html/

/var/ww/html 경로에 대하여 패키지 DB 파일 작성 ( createrepo 와 같은 작업 )

#cd /var/www/html
#tar cvjfp pip_backup.tgz *

copy pip_backup.tgz to local site ( internet diconnected site )

(출처 : <a target="_blank" href="http://blog.seabow.pe.kr/?p=7505" rel="nofollow">http://blog.seabow.pe.kr/?p=7505</a> )

 

Python Full mirror)

 

*mirror를 copy를 위한 환경 가상환경 구성
(이렇게 하는 이유는 불필요한 패키지를 굳이 메인 python에 설치할 필요는 없기 때문이다. 두서 없이
메인에 설치를 할 경우 나중에는 어떤게 설치되었는지 호환성 문제로 개발에 문제가 될 수 있다.)
virtualenv --no-site-packages pypi_mirror
source pypi_mirror/bin/activate
pip install pep381client
mkdir pypi_mirror/data/


* 중요코드
pep381run pypi_mirror/data/
# chown 소유자 pypi_mirror/data/ -R
# tar cvjfp pip_backup.tgz *

copy pip_backup.tgz to local site ( internet diconnected site ) 

 

2. pypi , cpan, cran mirror파일 copy (In internet  disconnected site)

 


$ cd /var/www/html

(이건 일반 적인 경로이며 nignx를 compile 하셨을 경우

default html 경로는 web server conf 파일을 참조하시기 바랍니다.)

$ mkdir pypi

$ mkdir cpan

$ mkdir cran

(Python)

$ cd pypi

$ tar xvjfp pip_backup.tgz


(Perl)

$ cd ../cpan

$ tar xvjfp cpan_backup.tgz


(R)

$ cd ../cran

$ tar xvjfp cran_backup.tgz

 

3.  사용방법

 

Python  ( 3 version)

$ pip install --trusted-host your_host_name --index-url http: <a target="_blank" href="http://your_host_name/simple" rel="nofollow">http://your_host_name/simple</a> django

 

Perl

$ cpan
cpan) o conf urlist
cpan) o conf urlist push <a target="_blank" href="http://$host_name/cpan/" rel="nofollow">http://$host_name/cpan/</a>
cpan) o conf urlist commit

$ cpan App::cpanminus
$ cpanm Module::Name
ex)$ cpanm Module::Perlbrew

 

R

자료 많아요.

 

의견,

위 내용은 mirror 사이트를 통째로 rsync해서 복사하기 때문에 cpan 약 20G cran 약 70G pypi 약 30G 정도가 되는데,

필요에 따라 minicpan, minicran, python의 경우 필요한 package 만 받아서 쓴다면 그리 오랜 시간을 들이지 않고 필요한 패키지를

Non-internet 환경에서 사용할 수 있다.

minicpan 이나 minicran도 시간이 될때 posting하도록 하겠다. 끗!

 

참조

nginx compile 설치 :

https://opentutorials.org/module/384/4511

Python repo:

http://blog.seabow.pe.kr/?p=7505

 

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.