理系学生日記

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

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

気軽にアップデートできない 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 ||<