humangas's blog

自分用のメモなので雑です。

インストール対象のRPMが依存しているパッケージを丸ごとダウンロードする

なんでそんなことをするのかというと。。。
自分はインフラエンジニアやってますが、お仕事だと、ネットに出れないサーバがいたり、そもそもインストールは環境管理側のセンターに任せろ。でも、そのための手順とモノは用意してね。ということが結構ある。
なので、依存パッケージごと丸ごとDLできればすげぇ楽なんです。で、今回の方法が大いに役に立つ。

やり方の結論は、yum downloadonly(yum の依存関係ファイルを全てダウンロードだけしてくれるコマンド)を使うです。

環境

  • RHEL6.2(EC2上に立ててる。Vagrantで立ててますが、その手順はまた別記事で)

やり方

downloadonlyをyumで導入

デフォだとそもそもこれが入ってないので入れる。

  • # yum -y install yum-plugin-downloadonly

実際ダウンロードしてみる

  • # yum install --downloadonly --downloaddir=<directory> <package>

以下はANSIBLEの場合(実は、ANSIBLEをRHEL6.2に入れたくて、その過程で書いてる。ANSIBLE記事は別記事で。)

# yum install --downloadonly --downloaddir=/tmp/ansible ansible
・・・ログ略・・・

# ls -l /tmp/ansible/
合計 3860
-rw-r--r--. 1 root root  161120  4月 27 16:18 2012 PyYAML-3.10-3.el6.x86_64.rpm
-rw-r--r--. 1 root root  836712  5月 24 12:21 2014 ansible-1.6.2-1.el6.noarch.rpm
-rw-r--r--. 1 root root   53452  3月 29 11:52 2014 libyaml-0.1.6-1.el6.x86_64.rpm
-rw-r--r--. 1 root root 1494848  4月 16 17:54 2014 python-babel-0.9.4-5.1.el6.noarch.rpm
-rw-r--r--. 1 root root  543156  3月 14 23:37 2014 python-crypto2.6-2.6.1-1.el6.x86_64.rpm
-rw-r--r--. 1 root root   72164  1月  7 12:10 2013 python-httplib2-0.7.7-1.el6.noarch.rpm
-rw-r--r--. 1 root root  477156  6月 11 22:47 2014 python-jinja2-2.2.1-2.el6_5.x86_64.rpm
-rw-r--r--. 1 root root  224124 12月 27 13:38 2012 python-keyczar-0.71c-1.el6.noarch.rpm
-rw-r--r--. 1 root root   71700  4月 16 17:54 2014 python-pyasn1-0.0.12a-1.el6.noarch.rpm

バッチリぽいですね。これをSCPとかでローカルに引っ張れば手元で管理しとけます。
ちなみに、DL先のディレクトリが無い場合は勝手に作ってくれるので、事前に用意しておく必要なし。

ちなみに、今回はEPELからDLしてます。

EPELというのは、RPMの拡張パッケージで、デフォルトのリポジトリに無いやつがあったりします。 その導入手順はコチラに書きましたので良ければ。

で、EPELの続きですが。。そもそも、EPELに入ってるRPMはどうやって知る?

いろいろ、あるかもしれませんが、WEBで見るのが楽かと。
EPELのルートから辿って、ブラウザ上で検索するのが楽です。自分はそうしてます。
で、メジャーバージョン> CPUアーキテクチャ とディレクトリを辿れば、RPMのページに辿りつけます。

今回のRHEL6.2だと、以下の具合で該当のRPMページに辿り着きます。 1. EPELのルートにアクセス 1. メジャーバージョンと用途(Clientと被るパッケージもあります):6Server 1. CPUアーキテクチャ:Intel x86_64 1. RPMの一覧ページで「例)ANSIBLE(目的のRPM)」で検索

該当のパッケージがあれば、EPELも含めて上記の方法でDL出来ます。
まぁ、一度リポジトリを登録してしまえば、yum コマンド発行時にどこにどのパッケージがあるか意識しないですけど。。

自分の使い方

この記事の冒頭で書いたように、そもそもネットアクセスできないサーバでこの手順を試してもダメです。当たり前ですが。 なので、一台ネットに出れる自由に触れる自分用のRHEL6.2サーバ(本番となるべく同じバージョンのサーバ)を用意しておいて、 そこで、この手順を試す。→ DLする。 → 本番サーバにSCPとかで持っていく。とかいう手順を踏みます。

自分の場合は、自由に触れるサーバはEC2で用意します。さらに、Vagrantで起動を組み合わせとけば、バージョン違いはami-idだけ調べれば良いので非常に楽と。
EC2使ったらダメということであれば、VirtualBoxかVMWare Player上でやるかな。

ちなみに、このVagrantで、RHEL6.2を建てるという手順は別記事で書きます。 以前に、QiitaでVagrantで AWS EC2インスタンス(RHEL5.5)を作成するという記事を書きましたが、今回バージョン違いとかでそのままでは上手く動かなかったので、焼き直しというイメージです。

参考にさせて頂いた記事