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 download SomePackage 

$ pip download -d . SomePackage # equivalent to above $ pip download --no-index --find-links=/tmp/wheelhouse -d /tmp/otherwhee

$ pip download -d /var/www/html Automat Babel BeautifulSoup Bottleneck Cython Django Django Flask Flask Flask Flask Flask Flask Flask Flask_Gravatar Flask_Migrate Flask_Paranoid Flask_SQLAlchemy Flask_Security Flask_WTF Jinja2 Logbook Mako Mako Markdown Markdown MarkupSafe MarkupSafe MarkupSafe Pillow PyDispatcher PyHamcrest PyNaCl PyNaCl PyQt5 PyQt5_sip PyYAML PyYAML Pygments SQLAlchemy Scrapy Send2Trash Twisted Twisted WTForms Werkzeug absl alembic ansible ansible argparse asgiref asn1crypto astor async_timeout atom attrs attrs autobahn backcall backports.ssl_match_hostname bcolz bcrypt bleach blinker certifi certifi cffi channels chardet click constantly contextlib2 cryptography cryptography cssselect cycler cyordereddict daphne debtcollector decorator django django django django django django django_filter django_redis django_sb_admin djangorestframework docker docker_pycreds empyrical entrypoints enum34 extras filelock fixtures funcsigs future gast grpcio html5lib htmlmin httplib2 hyperlink hyperlink idna idna incremental intervaltree ipaddress ipykernel ipython ipython_genutils ipywidgets iso8601 itsdangerous jedi jsonschema jsonxs jupyter jupyter_client jupyter_console jupyter_core kiwisolver kolla linecache2 lru lxml matplotlib mistune monotonic multipledispatch nbconvert nbformat netaddr netifaces networkx notebook numexpr numpy opencv_contrib_python opencv_contrib_python_headless opencv_python opencv_python_headless optional oslo.config oslo.i18n oslo.utils pandas pandas pandas_datareader pandocfilters paramiko paramiko parsel parso passlib pathlib patsy pbr pbr peewee pexpect pgadmin4 pickleshare pip pip_backup.tgz pluggy postgres prometheus_client prompt_toolkit protobuf psycopg2 ptyprocess py pyOpenSSL pyasn1 pyasn1_modules pycparser pycparser pycrypto pyparsing pyrsistent python python_dateutil python_mimeparse pytz pytz pytz pyzmq qtconsole queuelib redis requests requests requests requests_file rfc3986 scipy service_identity setuptools setuptools setuptools setuptools simple simplegeneric simplejson six six sortedcontainers speaklater sqlparse sqlparse sshtunnel statsmodels stevedore tables tensorboard tensorflow termcolor terminado testpath testtools toml toolz tornado tox traceback2 trading_calendars traitlets txaio unittest2 urllib3 urllib3 ushlex uwsgi virtualenv virtualenv w3lib wcwidth webencodings websocket_client wheel widgetsnbextension wrapt zipline zope.interface zope.interface python3.*</pre> <pre> #pip install –download /var/www/html kolla-ansible kolla-ansible netaddr six sΩetuptools pbr Jinja2 oslo.utils PyYAML oslo.coΩnfig 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.