自由気ままに書いちゃおう

好きなことをつらつらと・・・

RHEL7にPython3系をオフラインインストール

■目的
 インターネットから隔離された環境に存在するサーバに対して、Python3系をインストールしたい。

■余談
 NATゲートウェイを使って外と通信した方が簡単/早いけど、そういう環境も許されていないようなところもあると思うので・・・
 
■サーバ種別
 
RHEL7.6(ami-00b95502a4d51a07e)

■作業前のPython情報
# python --version
Python 2.7.5
 
■手順 
1.ローカルPCから下記URLにアクセスし、Python3系のtgzファイルを取得
   https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz 

  ※Pythonのバージョンは好きなものを選ぶ。上記では3.7.3を選択した。

2.下記RPMファイルを取得し保存しておく。
  ※RPMファイルはRHNから取得可能なため、そこから入手。
  ※今回は、Python3.7.3をインストールするためのパッケージを記載

  【gcc関連パッケージ】
  ・cpp-4.8.5-39.el7.x86_64.rpm
  ・gcc-4.8.5-39.el7.x86_64.rpm
  ・glibc-2.17-292.el7.x86_64.rpm
  ・glibc-common-2.17-292.el7.x86_64.rpm
  ・glibc-devel-2.17-292.el7.x86_64.rpm
  ・glibc-headers-2.17-292.el7.x86_64.rpm
  ・kernel-headers-3.10.0-1062.9.1.el7.x86_64.rpm
  ・libgcc-4.8.5-39.el7.x86_64.rpm
  ・libgomp-4.8.5-39.el7.x86_64.rpm
  ・libmpc-1.0.1-3.el7.x86_64.rpm
  ・mpfr-3.1.1-4.el7.x86_64.rpm

  【zlibパッケージ】  
  ・zlib-devel-1.2.7-18.el7.x86_64.rpm

  【libffi-devパッケージ】
  ・libffi-devel-3.0.13-18.el7.x86_64.rpm

3.対象サーバに上記手順2のファイルを転送(SCP/FTP等。手段問わず。)
  ここでは転送先ディレクトリを以下のようにした。
  Python3.7.3.tgz            →  /usr/local/src/ に格納
  gcc関連各種RPM           → /var/tmp/gcc/ に格納
  zlibで取得したRPM          → /var/tmp/zlib/ に格納
  libffi-develで取得したRPM      →/var/tmp/libffi-devel/ に格納

4.対象サーバにログインし、rootユーザにスイッチ

5.以下コマンドを実行し、gcc、zlib、libffi-develをインストール

  【gccインストール】
  # cd /var/tmp/gcc;pwd
  # rpm -Uvh cpp-4.8.5-39.el7.x86_64.rpm gcc-4.8.5-39.el7.x86_64.rpm glibc-2.17-292.el7.x86_64.rpm glibc-common-2.17-292.el7.x86_64.rpm glibc-devel-2.17-292.el7.x86_64.rpm glibc-headers-2.17-292.el7.x86_64.rpm kernel-headers-3.10.0-1062.9.1.el7.x86_64.rpm libgcc-4.8.5-39.el7.x86_64.rpm libgomp-4.8.5-39.el7.x86_64.rpm libmpc-1.0.1-3.el7.x86_64.rpm mpfr-3.1.1-4.el7.x86_64.rpm

  【zlibインストール】
  
# cd /var/tmp/zlib;pwd
  # rpm -Uvh zlib-devel-1.2.7-18.el7.x86_64.rpm

  【libffi-develインストール】
  
# cd /var/tmp/libffi-devel;pwd
  # rpm -Uvh libffi-devel-3.0.13-18.el7.x86_64.rpm

  【おまけ:opensslのアップグレード】
  ※実施した方がpipコマンド使う際に悩まなくて済む
  ・openssl-1.0.2k-19.el7.x86_64.rpm
  ・openssl-devel-1.0.2k-19.el7.x86_64.rpm

  # rpm -Uvh openssl-1.0.2k-19.el7.x86_64.rpm openssl-devel-1.0.2k-19.el7.x86_64.rpm
 

7.以下コマンドを実行し、Python3.7.3をインストール

  # cd /usr/loca/src;pwd
  # tar xvzf  Python-3.7.3.tgz
  # cd Python-3.7.3;pwd
  # ./configure --prefix=/usr/local/python   ※インストール先を/usr/local/pythonとした。
   →「creating Makefile」と表示されていればOK
  # make
   → 3分程度かかるので少し待つ
  # make install
   → 3分程度かかるので少し待つ。「Successfully installed pip-19.0.3 setuptools-40.8.0」が出力されていればOK

8.以下コマンドを実行し、Python3.7.3がインストールされたことを確認
  # cd /usr/local/python/bin;pwd
  # ./python3 --version
  Python 3.7.3    ※Python3.7.3が出力されていればOK

  # ./pip3 --version
  pip 19.0.3 from /usr/local/python/lib/python3.7/site-packages/pip (python 3.7)    ※Pythonをインストールすると自動的にpipもインストールされるため、確認

9.このままだとPython3.7.3へのパスが通っていないため、環境変数PATHを変更
  # echo $PATH
  /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  → /usr/local/python/binが含まれていないことが確認できる

  # which python
  /bin/python

  # python --version
  Python 2.7.5

  # vi /root/.bash_profile
   作業前: PATH=$PATH:$HOME/bin
   作業後: PATH=$PATH:$HOME/bin:/usr/local/python/bin   ※赤字部分を追記

  # source .bash_profile

  # echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/python/bin  ※正常に追加されていることを確認できた

  # python3 --version
  Python 3.7.3    ※パスが通っていることを確認できた

  # pip3 --version
  pip 19.0.3 from /usr/local/python/lib/python3.7/site-packages/pip (python 3.7) ※パスが通っていることを確認できた