読者です 読者をやめる 読者になる 読者になる

理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

Linuxで気軽にアップデートできないパッケージを気軽にインストールしたい(yum-plugin-downloadonly, yum-plugin-priorities)

気軽にアップデートできない Linux のパッケージを、気軽にインストールしたいわけ。
気軽にインストールするために yum 使いたいんだけど、気軽に yum update した結果としてパッケージの互換性崩れて死にたくないわけ。

そういうときにどうすれば良いかをしばし考えた後、

  1. 気軽にインストールしたいパッケージの RPM を、依存する RPM とともにダウンロードする
  2. ダウンロードした PRM でオレオレ yum リポジトリを構築する
  3. オレオレ yum リポジトリからパッケージをインストールする

というような方法であればうまくいくだろうということにした。

1. RPM を依存する RPM とともにダウンロードする

これは、yum のプラグインである yum-plugin-downloadonly でできる。

# yum install yum-plugin-downloadonly

ってしてやれば、勝手にインストールされて有効化され、yum で --downloadonly、--downloaddir オプションが使えるようになる。

# yum install --downloadonly --downloaddir /tmp/repo emacs

とか実行してやれば、/tmp に emacs-*.rpm とともに cairo-*.rpm とかの依存 RPM もダウンロードされるかんじになります。

オレオレ yum リポジトリを構築する

これは createrepo コマンドを使えば一発です。

$ createrepo /tmp/repo

単にこうするだけで、RPM のメタデータが同ディレクトリ配下の repodata ディレクトリに作成されます。
これで、一人前の yum リポジトリが作成されました。

あとは、yum に yum リポジトリの存在を教えてあげないといけません。
/etc/yum.repos.d 配下に、適当な名前で yum のリポジトリ定義を作ってあげましょう。

# cat <<EOF > /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 をインストールすることで可能になります。

# yum install yum-plugin-priorities

こうすると、/etc/yum.repos.d 配下のリポジトリ定義に priority というフィールドが定義できるようになります。priority は値の小さい方が優先度が高いので、例えば

$ 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 からインストールできるようになります。

# 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