インターネットに行けないRedHat系linuxでのyum

こんなネタ、アタシが書かなくても大量に情報出てくると思うけどね。自分用メモです。

そもそも「古くからのUnixユーザ」だもんで、ソースからビルドするのは全く厭わない人だし、なんなら自分がビルドした方が信用出来るぜ、と思うこともままあって、これをしたいのはまぁ、「ソースからビルドするのは依存物が多過ぎて大変」なほどの大物か、もしくは「自分ではない誰かのため」の作業の場合ね。だからこんなこと、個人的に滅多にやらない…からこそ、あんま憶えらんなくてな。

今回これをしたかったのはまさしく大物「emacs」だったのな。これは自力でビルドするのはそこそこ大変さ。

まず当然だけれど、ステップがふたつ。一つ目は「対象の rpm をダウンロードすること」であって、ここはどうしたってインターネットに繋がる linux が必要。しかも「インストールしたいターゲットと全く同じバージョンの linux」な。(これがあるからあたしはソースからビルドする方が「楽だ」と思うわけなんだけどね。)

この最初のステップをさ、標準のままの yum で出来たらよかったんだけどね、出来ないんだなぁ…。2つ選択肢がありますよ。1つ目は、yum の「downloadonlyプラグイン」を使うこと。これは別途インストール必要なのねん。RHEL5系では

1 me@host: ~$ yum install yum-downloadonly

RHEL6系(CentOS6とか)では

1 me@host: ~$ yum install yum-plugin-downloadonly

もうひとつは「yumdownloader」:

1 me@host: ~$ yum install yum-utils

で、「欲しいパッケージのダウンロード(今の場合 emacs)」は、

1 me@host: ~$ yum install --downloadonly --downloaddir=/path/to/dldir emacs

yumdownloaderの場合は

1 me@host: ~$ yumdownloader --destdir=/path/to/dldir --resolve emacs

あとはこれでダウンロードした rpm たちを、「なんとかして」(実際これが一番厄介だったりするけどさ)インストールしたい linux 環境に持っていく、と。

ターゲットの linux では downloadonly も yumdownloader も不要で、標準の yum だけあればいい(追記参照):

1 me@host: ~$ yum --nogpgcheck localinstall emacs-23.1-25.el6.x86_64.rpm

とか。同じ場所にまとまってれば、ダウンロードしてきた依存物も拾ってくれるみたい。

なお、この情報は以下2つのサイトから得ました:

  1. How to use yum to download a package without installing it
  2. Use yum to install a local package, automatically checking/satisfying dependencies






追記(2015-05-05 15:30):

嘘こいた。インターネットに行ける環境だけで確認したので、うまくいった気になってしまってた。Now retrying…。

追記(2015-05-05 15:39):

一応こんなバカ丸出しのやり方で。依存順じゃないので、何回か繰り返せばいい:

1 me@host: ~$ for i in *.rpm ; do
2 > yum --disablerepo='*' --nogpgcheck localinstall $i
3 > done