안녕하세요.
금융, 연구소, 대학교 등 여러 중요시설 폐쇄망에서 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)
#&amp;amp;amp;amp;amp;amp;nbsp;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 에서 다운로드 받아야 함. ) &nbsp; $ 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.*&lt;/pre&gt; &lt;pre&gt; #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 와 같은 작업 ) &nbsp;#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