気軽にアップデートできない Linux のパッケージを、気軽にインストールしたいわけ。 気軽にインストールするために yum 使いたいんだけど、気軽に yum update した結果としてパッケージの互換性崩れて死にたくないわけ。
そういうときにどうすれば良いかをしばし考えた後、 + 気軽にインストールしたいパッケージの RPM を、依存する RPM とともにダウンロードする + ダウンロードした PRM でオレオレ yum リポジトリを構築する + オレオレ yum リポジトリからパッケージをインストールする というような方法であればうまくいくだろうということにした。
** 1. RPM を依存する RPM とともにダウンロードする
これは、yum のプラグインである yum-plugin-downloadonly でできる。
|tcsh|
yum install yum-plugin-downloadonly
||< ってしてやれば、勝手にインストールされて有効化され、yum で --downloadonly、--downloaddir オプションが使えるようになる。 |tcsh|
yum install --downloadonly --downloaddir /tmp/repo emacs
||< とか実行してやれば、/tmp に emacs-.rpm とともに cairo-.rpm とかの依存 RPM もダウンロードされるかんじになります。
*** オレオレ yum リポジトリを構築する
これは createrepo コマンドを使えば一発です。
|tcsh| $ createrepo /tmp/repo ||< 単にこうするだけで、RPM のメタデータが同ディレクトリ配下の repodata ディレクトリに作成されます。 これで、一人前の yum リポジトリが作成されました。
あとは、yum に yum リポジトリの存在を教えてあげないといけません。 /etc/yum.repos.d 配下に、適当な名前で yum のリポジトリ定義を作ってあげましょう。
|tcsh|
cat <
/etc/yum.repos.d/myrepo.repo [myrepo] name = my repository baseurl = file:///tmp/repo EOF ||<
*** オレオレ yum リポジトリからパッケージをインストールする このままだと、myrepo にある RPM ではなく他のリポジトリ(例えば公式のリポジトリ)が優先されてしまいます。 なので、リポジトリの優先度を変えましょう。 リポジトリの優先度の設定は、https://wiki.centos.org/PackageManagement/Yum/Priorities:yum-plugin-priorities をインストールすることで可能になります。
|tcsh|
yum install yum-plugin-priorities
||< こうすると、/etc/yum.repos.d 配下のリポジトリ定義に priority というフィールドが定義できるようになります。priority は値の小さい方が優先度が高いので、例えば |tcsh| $ diff -u /etc/yum.repos.d/CentOS-Base.repo{.orig,} --- /etc/yum.repos.d/CentOS-Base.repo.orig 2015-08-03 16:13:46.000000000 +0000 +++ /etc/yum.repos.d/CentOS-Base.repo 2015-09-09 13:11:34.073826434 +0000 @@ -16,6 +16,7 @@ #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 +priority=2
#released updates [updates] @@ -24,6 +25,7 @@ #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 +priority=2
#additional packages that may be useful [extras] @@ -32,6 +34,7 @@ #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-K
$ diff -u myrepo.repo{.orig,} --- myrepo.repo.orig 2015-09-09 13:04:51.628703317 +0000 +++ myrepo.repo 2015-09-09 13:13:25.628576419 +0000 @@ -1,3 +1,5 @@ [myrepo] name = my repository baseurl = file:///tmp/repo +priority = 1 + ||< というように設定ファイルを編集しましたら、以下のようにオレオレリポジトリ myrepo からインストールできるようになります。
|tcsh|
yum install emacs
(snip)
Dependencies Resolved
Package Arch Version Repository Size
Installing: emacs x86_64 1:23.1-28.el6 myrepo 2.2 M Installing for dependencies: ConsoleKit x86_64 0.4.1-3.el6 myrepo 82 k ConsoleKit-libs x86_64 0.4.1-3.el6 myrepo 17 k ||<