オフライン環境でCentOS7のパッケージをインストールする

開発において，インターネットから切り離したオフライン環境にテスト実行環境を作ることがあります．

オフライン環境で実行しているサーバに新たなパッケージをインストールする場合，開発者自身が全ての依存関係を把握することは至難の業です．

そこで，CentOSのパッケージ管理システムにより，依存関係を解決してもらいます．

ミラーサーバをオフライン環境に作る程でもない，ことが前提です．

# 別のサーバで`--downloadonly`オプションを使ってRPM一式をダウンロード

インターネットに繋がるCentOSサーバを別に1台用意して，オフラインにインストールするパッケージをyumコマンドでダウンロードします．

```bash:
#yum install squid --downloadonly --downloaddir=$(pwd)

...

Dependencies Resolved

===================================================================================================
 Package                          Arch            Version                      Repository     Size
===================================================================================================
Installing:
 squid                            x86_64          7:3.3.8-12.el7_0             base          2.6 M
Installing for dependencies:
 libecap                          x86_64          0.2.0-8.el7                  base           20 k
 libtool-ltdl                     x86_64          2.4.2-20.el7                 base           49 k
 perl-Compress-Raw-Bzip2          x86_64          2.061-3.el7                  base           32 k
 perl-Compress-Raw-Zlib           x86_64          1:2.061-4.el7                base           57 k
 perl-DBI                         x86_64          1.627-4.el7                  base          802 k
 perl-Data-Dumper                 x86_64          2.145-3.el7                  base           47 k
 perl-Digest                      noarch          1.17-245.el7                 base           23 k
 perl-Digest-MD5                  x86_64          2.52-3.el7                   base           30 k
 perl-IO-Compress                 noarch          2.061-2.el7                  base          260 k
 perl-Net-Daemon                  noarch          0.48-5.el7                   base           51 k
 perl-PlRPC                       noarch          0.2020-14.el7                base           36 k

Transaction Summary
===================================================================================================
Install  1 Package (+11 Dependent packages)

Total download size: 3.9 M
Installed size: 12 M
Background downloading packages, then exiting:
(1/12): libecap-0.2.0-8.el7.x86_64.rpm                                      |  20 kB  00:00:00     
(2/12): libtool-ltdl-2.4.2-20.el7.x86_64.rpm                                |  49 kB  00:00:00     
(3/12): perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64.rpm                      |  32 kB  00:00:00     
(4/12): perl-Compress-Raw-Zlib-2.061-4.el7.x86_64.rpm                       |  57 kB  00:00:00     
(5/12): perl-Data-Dumper-2.145-3.el7.x86_64.rpm                             |  47 kB  00:00:00     
(6/12): perl-Digest-1.17-245.el7.noarch.rpm                                 |  23 kB  00:00:00     
(7/12): perl-Digest-MD5-2.52-3.el7.x86_64.rpm                               |  30 kB  00:00:00     
(8/12): perl-IO-Compress-2.061-2.el7.noarch.rpm                             | 260 kB  00:00:00     
(9/12): perl-Net-Daemon-0.48-5.el7.noarch.rpm                               |  51 kB  00:00:00     
(10/12): perl-PlRPC-0.2020-14.el7.noarch.rpm                                |  36 kB  00:00:00     
(11/12): perl-DBI-1.627-4.el7.x86_64.rpm                                    | 802 kB  00:00:00     
(12/12): squid-3.3.8-12.el7_0.x86_64.rpm                                    | 2.6 MB  00:00:01     
---------------------------------------------------------------------------------------------------
Total                                                              1.9 MB/s | 3.9 MB  00:00:02     
exiting because "Download Only" specified

#ls
libecap-0.2.0-8.el7.x86_64.rpm                  perl-Digest-1.17-245.el7.noarch.rpm
libtool-ltdl-2.4.2-20.el7.x86_64.rpm            perl-Digest-MD5-2.52-3.el7.x86_64.rpm
perl-Compress-Raw-Bzip2-2.061-3.el7.x86_64.rpm  perl-IO-Compress-2.061-2.el7.noarch.rpm
perl-Compress-Raw-Zlib-2.061-4.el7.x86_64.rpm   perl-Net-Daemon-0.48-5.el7.noarch.rpm
perl-Data-Dumper-2.145-3.el7.x86_64.rpm         perl-PlRPC-0.2020-14.el7.noarch.rpm
perl-DBI-1.627-4.el7.x86_64.rpm                 squid-3.3.8-12.el7_0.x86_64.rpm
```

# オフライン環境のサーバにインストール

ダウンロードしたRPM一式をオフライン環境に持ち込んで，RPMをインストールします．

```
# rpm -ivh *
Preparing...                          ################################# [100%]
Updating / installing...
   1:perl-Data-Dumper-2.145-3.el7     ################################# [  8%]
   2:perl-Net-Daemon-0.48-5.el7       ################################# [ 17%]
   3:perl-Digest-1.17-245.el7         ################################# [ 25%]
   4:perl-Digest-MD5-2.52-3.el7       ################################# [ 33%]
   5:perl-Compress-Raw-Zlib-1:2.061-4.################################# [ 42%]
   6:perl-Compress-Raw-Bzip2-2.061-3.e################################# [ 50%]
   7:perl-IO-Compress-2.061-2.el7     ################################# [ 58%]
   8:perl-PlRPC-0.2020-14.el7         ################################# [ 67%]
   9:perl-DBI-1.627-4.el7             ################################# [ 75%]
  10:libtool-ltdl-2.4.2-20.el7        ################################# [ 83%]
  11:libecap-0.2.0-8.el7              ################################# [ 92%]
  12:squid-7:3.3.8-12.el7_0           ################################# [100%]
```

# おわりに
オフライン環境へのコピーや構築の自動化を図る手段があると思いますが，上手い方法があれば，是非教えてください．