yumリポジトリの使い方/設定/作成方法

業務でよく使用するyumコマンドの使い方についてまとめます。また、リポジトリの設定(登録)方法や、LAN内yumリポジトリの作成方法についても触れます。

yum コマンド

使用頻度の高いコマンド一覧

yumは、Redhat系のLinuxにおけるパッケージ管理の仕組みです。使用頻度の高いyumコマンドをまとめると以下のようになります。

コマンド説明
install指定したパッケージをインストールします。
remove指定したパッケージを削除します。
update指定したパッケージをバージョンアップします。
searchパッケージを検索します。
provides指定したコマンドを提供するパッケージを検索します。
clean metadataパッケージに関するメタデータを削除します。

yum install

yum installは指定したパッケージをインストールするコマンドです。

使用例は以下の通りです。以下のようなコマンドを実行する事で、”httpdをインストールする事ができます。なお、-yは質問に対して全て”yes”と答えるオプションです。”yes”と入力するのが面倒な場合やスクリプトで自動化を検討する場合などは、-yオプションを付与しましょう。

# yum -y install httpd

yum search

yum searchはパッケージ名を検索するコマンドです。

例えば、ruby gemを検索したいと思います。以下のようにコマンドを実行すると、”rubygem”を含むパッケージ名を検索する事ができます。検索の結果、正確なパッケージ名は”rubygems”である事が分かります。

[root@localhost ~]# yum search rubygem
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
=============================== Matched: rubygem ===============================
rubygems.noarch : The Ruby standard for packaging ruby libraries
[root@localhost ~]#

検索対象となるのは、パッケージ名とSummary(パッケージの説明概要)です。Summaryも検索対象である事を意識しておくと何かと便利です。例えば、”yum search japanese”とすると日本語フォント一覧を検索する事ができます。

[root@localhost ~]# yum search japanese
Loaded plugins: etckeeper, fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.jaist.ac.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * rpmforge: ftp.riken.jp
 * updates: ftp.tsukuba.wide.ad.jp
============================ N/S Matched: japanese =============================
Canna.x86_64 : A Japanese character set input system.
anthy.i686 : Japanese character set input library
ipa-gothic-fonts.noarch : Japanese Gothic-typeface OpenType font by IPA
ipa-mincho-fonts.noarch : Japanese Mincho-typeface OpenType font by IPA
ipa-pmincho-fonts.noarch : Japanese Proportional Mincho-typeface OpenType font
                         : by IPA
kde-i18n-Japanese.noarch : Japanese(ja) language support for KDE3
kde-l10n-Japanese.noarch : Japanese language support for KDE
m17n-db-japanese.noarch : m17n-db input maps for Japanese
man-pages-ja.noarch : Japanese man (manual) pages from the Japanese Manual
                    : Project

 <omitted>

yum provides (whatprovides)

yum provides または whatprovides は、コマンド名からパッケージ名を検索するコマンドです。

例えば、snmpwalkコマンドを提供するパッケージ名を検索するには、”yum provides */snmpwalk”とします。このコマンドの注意点は、コマンドのフルパスを指定しなければならない事です。恐らくコマンドのフルパスを覚えている人はいないと思いますので、snmpwalkコマンドを調べたいならば、*/snmpwalkのように適宜ワイルドカードを使用して下さい。

操作例は以下の通りです。

[root@localhost ~]# yum provides */bin/snmpwalk
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
1:net-snmp-utils-5.3.2.2-14.el5.x86_64 : Network management utilities using
                                       : SNMP, from the NET-SNMP project.
Repo        : base
Matched from:
Filename    : /usr/bin/snmpwalk

 <omitted>

yum clean metadata

yum clean metadataはパッケージ管理に関するメタデータを削除するコマンドです。

yum update等の完了を待ちきれずCtrl+Cで強制終了させてしまうと、yumのメタデータが壊れてしまいます。恐らく、”TypeError: unsubscriptable object”のようなエラーメッセージが表示されるでしょう。

このようなエラーが発生した場合は、”yum clean metadata”コマンドでメタデータを削除して下さい。メタデータを削除すれば、yumコマンド再実行時にメタデータが再構築されエラーが解消されます。

[root@localhost ~]# clean metadata

リポジトリの追加

yumは必要に応じてリポジトリを追加する事ができます。リポジトリを追加する目的は大きく分けて以下2つです。

  • 拡張リポジトリ : 最新のソフトウェアを使用したい
  • 特定リポジトリ : リポジトリによって提供されるソフトウェアをインストールしたい

なお、「拡張リポジトリ」「特定リポジトリ」というのは私の造語です。一般的な命名ではない事をご承知ください。

拡張リポジトリの追加

CentOS, Redhat, Oracle Linux等は比較的安定したソフトウェアを使用します。一方、Fedora等は新しいソフトウェアを提供します。CentOS, Redhat, Oracle Linux等を使用する場合は、提供するパッケージのバージョンが古く業務要件を満たさない場合もあるかもしれません。

そのような場合は、Fedora等のリポジトリを追加する事によって、新しいソフトウェアを導入する事ができます。CentOSを使用している人がよく追加するリポジトリは以下3つです。

  • RPMforge
  • EPEL
  • Remi

これらリポジトリを追加するには、以下のRPMをインストールしてください。RPMをインストールすると、自動的にリポジトリの設定が作成されます。インストールすべきRPMは、OSバージョンやCPUアーキテクチャによって異なる事に注意して下さい。

# rpm -ihv http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# rpm -ihv http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ihv http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

RPMインストール後、/etc/yum.repos.d/配下に、epel.repo, mirrors-rpmforge, remi.repoが作成された事を確認します。

RPMインストールは、epel.repo, mirrors-rpmforge, remi.repoを作成する事と全く同じ操作です。ですので、epel.repo, mirrors-rpmforge, remi.repoを手作業で作成しても差し支えございません。

[root@localhost ~]# ll /etc/yum.repos.d/
total 52
-rw-r--r--. 1 root root 1926 Dec  1  2013 CentOS-Base.repo
-rw-r--r--. 1 root root  638 Dec  1  2013 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  630 Dec  1  2013 CentOS-Media.repo
-rw-r--r--. 1 root root 4528 Dec  1  2013 CentOS-Vault.repo
-rw-r--r--. 1 root root 1056 Nov  5  2012 epel-testing.repo
-rw-r--r--. 1 root root  957 Nov  5  2012 epel.repo
-rw-r--r--  1 root root  739 Mar 20  2013 mirrors-rpmforge
-rw-r--r--  1 root root  717 Mar 20  2013 mirrors-rpmforge-extras
-rw-r--r--  1 root root  728 Mar 20  2013 mirrors-rpmforge-testing
-rw-r--r--  1 root root 2546 Sep 27 00:01 public-yum-ol6.repo
-rw-r--r--  1 root root 2298 Mar  1  2014 remi.repo
-rw-r--r--  1 root root 1128 Mar 20  2013 rpmforge.repo
[root@localhost ~]#

RPMForge, EPEL, Remiは非常に便利ですが、「新しい」という事は「バグが枯れていない」という事の裏返しである事に注意して下さい。WEB系の企業ではこれら3つのリポジトリを有効化するのは当たり前ですが、慎重なSIerではリポジトリ追加を行って良いかは要顧客確認です。

専用リポジトリの追加

近年、リポジトリを追加した後にyumコマンドでインストールを行うソフトウェアが増加傾向にあります。例えば、jenkins, nginx, td-agent, mysql, Oracle Pre Install等を挙げる事ができます。以下、Jenkinsのインストールを例に挙げて、専用リポジトリの追加方法を説明します。

手順は非常に簡単です。公式サイトに書かれている手順のコピペで問題なく動作します。

yum_jenkins_001

まず、Jenkinsリポジトリを登録します。

# wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
# rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

次にyumコマンドでJenkinsのインストールを行います。

# yum install jenkins

以上でJenkinsのインストールが完了です。

yum 設定

/etc/yum.conf, /etc/yum.repos.dの設定を変更する事によって、yumコマンド実行時の挙動を変更する事ができます。

yum リポジトリの有効化 無効化

yumリポジトリは有効 無効を定義する事ができます。例えば、Amazon Linuxの設定は、安定したAmazon Linuxリポジトリは有効になっていますが、新しい(不安定な)EPELリポジトリは無効化されています。このように不安定なリポジトリを無効化しておく事で、バグを含むリスクが大きなソフトウェアを不用意にインストールする事を防ぐ事ができます。

リポジトリの有効無効は、”yum repolist”コマンドで確認する事ができます。このコマンドで有効なリポジトリ一覧を表示します。このコマンドにallオプションを付与すれば、無効なリポジトリ含め一覧を表示します。

[root@localhost ~]# yum repolist all
Loaded plugins: etckeeper, fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.tsukuba.wide.ad.jp
repo id                repo name                                  status

 <omitted>

base                   CentOS-6 - Base                            enabled:  6367
c6-media               CentOS-6 - Media                           disabled
centosplus             CentOS-6 - Plus                            disabled
contrib                CentOS-6 - Contrib                         disabled
debug                  CentOS-6 - Debuginfo                       disabled
epel                   Extra Packages for Enterprise Linux 6 - x8 enabled: 11124
epel-debuginfo         Extra Packages for Enterprise Linux 6 - x8 disabled
epel-source            Extra Packages for Enterprise Linux 6 - x8 disabled
epel-testing           Extra Packages for Enterprise Linux 6 - Te disabled
epel-testing-debuginfo Extra Packages for Enterprise Linux 6 - Te disabled
epel-testing-source    Extra Packages for Enterprise Linux 6 - Te disabled

リポジトリの有効無効は、enabledという項目によって定義されます。以下は、/etc/yum.repos.d/epel.repoの設定の一部です。enabled=1となっている事からepelリポジトリは有効になっているのに対し、enabled=0となっている事からepel-debuginfoは無効になっている事が分かります。

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1

このenabledの部分をエディタで書き換えても良いですが、yum-config-managerというコマンドを用いるともっと便利です。以下は、centosplusを有効にする操作例です。

[root@localhost ~]# yum-config-manager --enable centosplus
Loaded plugins: etckeeper, fastestmirror
=============================== repo: centosplus ===============================
[centosplus]
bandwidth = 0
base_persistdir = /var/lib/yum/repos/x86_64/6
baseurl =
cache = 0
cachedir = /var/cache/yum/x86_64/6/centosplus
cost = 1000
enabled = 1
enablegroups = True
exclude =

centosplusが有効になった事を確認します。

[root@localhost ~]# yum repolist all
Loaded plugins: etckeeper, fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.tsukuba.wide.ad.jp
repo id                repo name                                  status

 <omitted>

base                   CentOS-6 - Base                            enabled:  6367
c6-media               CentOS-6 - Media                           disabled
centosplus             CentOS-6 - Plus                            enabled:    96
contrib                CentOS-6 - Contrib                         disabled
debug                  CentOS-6 - Debuginfo                       disabled
epel                   Extra Packages for Enterprise Linux 6 - x8 enabled: 11124
epel-debuginfo         Extra Packages for Enterprise Linux 6 - x8 disabled
epel-source            Extra Packages for Enterprise Linux 6 - x8 disabled
epel-testing           Extra Packages for Enterprise Linux 6 - Te disabled
epel-testing-debuginfo Extra Packages for Enterprise Linux 6 - Te disabled
epel-testing-source    Extra Packages for Enterprise Linux 6 - Te disabled

特定ファイルの除外

パッケージの中には、バージョンアップの影響が大きい物と小さい物があります。中でもkernelのバージョンアップはOSの挙動を大きく変えてしまうので、意図しないバージョンアップは何としてでも避けなければなりません。

このような要件の場合、/etc/yum.confにexcludeを指定する事で、特定のパッケージをyumコマンドの対象外とする事ができます。設定例は以下の通りです。複数のパッケージを除外したい場合は以下のようにワイルドカードを使用して下さい。

diff --git a/yum.conf b/yum.conf
index 012b7ed..13acfe0 100644
--- a/yum.conf
+++ b/yum.conf
@@ -20,6 +20,7 @@ distroverpkg=centos-release
 # interupting your command line usage, it's much better to have something
 # manually check the metadata once an hour (yum-updatesd will do this).
 # metadata_expire=90m
+exclude=kernel* php*

 # PUT YOUR REPOS HERE OR IN separate files named file.repo
 # in /etc/yum.repos.d

yum やや使用頻度の低い コマンドとオプションの紹介

やや使用頻度の低いyumコマンドとオプションを紹介します。知らなくてもどうにか運用できますが、知っていると何かと便利なコマンドとオプションです。

yum groupinstall

groupinstallはパッケージ群をインストールするコマンドです。KVMをインストールするならば”Virtualization Platform”が必要になりますし、OracleのようなGUI環境が必要ならば”X Window System”が必要になります。コマンドの実行例は以下の通りです。

パッケージ群の名前はスペースを含む事もありますので、スペースを含む場合はダブルクォートまたはシングルクォートで囲んで下さい。

# yum groupinstall "X Window System"

yum grouplist

yum grouplistはgruopinstallコマンドでインストール可能なパッケージ群一覧を表示させます。パッケージ群の名前はディストリビューションやバージョンによって微妙に異なります。どこかのブログ記事の”yum groupinstall”コマンドをコピペしても動かない事が多いので、ちゃんとgrouplistコマンドで調べてからgroupinstallを実行するようにしましょう。

コマンドの実行例は以下の通りです。

[root@localhost ~]# yum grouplist
Loaded plugins: etckeeper, fastestmirror, security
Setting up Group Process
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * centosplus: ftp.nara.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.nara.wide.ad.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.nara.wide.ad.jp
Installed Groups:
   Additional Development
   Base
   Compatibility libraries
   Development tools
   Fonts
   Graphical Administration Tools
   Hardware monitoring utilities
   Legacy UNIX compatibility
   Milkymist
   Networking Tools
   Perl Support
   Security Tools
   Web Server
Installed Language Groups:
   Japanese Support [ja]
Available Groups:
   Backup Client
   Backup Server
   CIFS file server
   Client management tools
   Console internet tools
   Debugging Tools
   Desktop
   Desktop Debugging and Performance Tools

 <omitted>

yum –enablerepo –disablerepo

enablerepo, disablerepoは一時的にリポジトリの有効無効を切り替えるコマンドです。例えば、epelが無効化されている環境において、一時的にepelを使用したい場合は”–enablerepo=epel”とします。コマンドの実行例は以下の通りです。

[root@localhost ~]# yum install --enablerepo=epel munin
Loaded plugins: etckeeper, fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * centosplus: ftp.nara.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.nara.wide.ad.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.nara.wide.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package munin.noarch 0:2.0.21-1.el6 will be installed
--> Processing Dependency: sysstat for package: munin-2.0.21-1.el6.noarch
--> Processing Dependency: perl(Taint::Runtime) for package: munin-2.0.21-1.el6.noarch
--> Processing Dependency: perl(RRDs) for package: munin-2.0.21-1.el6.noarch
--> Processing Dependency: perl(Params::Validate) for package: munin-2.0.21-1.el6.noarch
--> Processing Dependency: perl(Net::Server::Fork) for package: munin-2.0.21-1.el6.noarch
--> Processing Dependency: perl(Net::Server) for package: munin-2.0.21-1.el6.noarch
--> Processing Dependency: perl(Net::SNMP) for package: munin-2.0.21-1.el6.noarch
--> Processing Dependency: perl(Net::CIDR) for package: munin-2.0.21-1.el6.noarch

 <omitted>

全てのリポジトリを有効化しているような無鉄砲漢らしい環境ならば、disablerepoの指定も有効です。例えば、baseのパッケージのみを使用したいならば、”–disablerepo=*”の後に”–enablerepo=base”とすると良いでしょう。実行例は以下の通りです。

[root@localhost ~]# yum update --disablerepo=* --enablerepo=base
Loaded plugins: etckeeper, fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
Setting up Update Process
No Packages marked for Update

yum –disableexcludes

disableexcludesオプションはexcludesで無効化したパッケージの設定を無視するオプションです。

環境によっては/etc/yum.confに”exclude=kernel*”の指定が存在し、kernelのバージョンアップができない場合もあるかと思います。このような環境下でkernelのバージョンアップを行うには/etc/yum.confを一時的に書きかえても良いですが、disableexcludesオプションを指定した方がより便利です。

disableexcludesにはパッケージ無効化を無視したいリポジトリを指定します。例えば、epelならば”–disableexcludes=epel”と指定し、全てのリポジトリを対象にするならば、”–disableexcludes=all”とします。コマンドの実行例は以下の通りです。

[root@localhost ~]# yum update --disableexcludes=all kernel
Loaded plugins: etckeeper, fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * centosplus: ftp.nara.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.nara.wide.ad.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.nara.wide.ad.jp
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:2.6.32-431.29.2.el6.centos.plus will be installed
--> Processing Dependency: kernel-firmware >= 2.6.32-431.29.2.el6.centos.plus for package: kernel-2.6.32-431.29.2.el6.centos.plus.x86_64
--> Running transaction check
---> Package kernel-firmware.noarch 0:2.6.32-431.29.2.el6 will be updated
---> Package kernel-firmware.noarch 0:2.6.32-431.29.2.el6.centos.plus will be an update
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package          Arch    Version                             Repository   Size
================================================================================
Installing:
 kernel           x86_64  2.6.32-431.29.2.el6.centos.plus     centosplus   28 M
Updating for dependencies:
 kernel-firmware  noarch  2.6.32-431.29.2.el6.centos.plus     centosplus   13 M

Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       1 Package(s)

Total download size: 41 M
Is this ok [y/N]:

ミラーリポジトリ (LAN内リポジトリ) の作成

ミラーリポジトリ作成の目的

非機能要件や運用ルールによっては、LAN内のリポジトリ構築を検討した方が良い事もあります。LAN内にリポジトリを構築するメリットは以下の通りです。

  • 容易なパッケージ管理ができる。
  • パッケージバージョンを固定化できる
  • インターネットまたは社外リポジトリの仕様変更/障害の影響を受けない

当たり前の話かもしれませんが、yumのメリットは容易なパッケージ管理です。RPMコマンドと違って自動的に依存関係を解決してくれます。エンタープライズ環境では「そもそもインターネット接続ができない」との理由でyumによる管理を諦めている運用もありますが、LAN内にリポジトリを構築してしまえばyumの恩恵を受ける事ができます。リポジトリの構築はそれ程難しくはありません。

例えば”yum install td-agent”のようにバージョン指定を省略すると、最新バージョンのパッケージがインストールされてしまいます。言い換えれば、リポジトリ側に新バージョンのRPMが配置されれば、勝手にバージョンアップされてしまう事を意味します。もし、意図しないバージョンアップを避けたいならば、社内にリポジトリを構築しバージョンを管理できるようにする必要があります。

LAN内リポジトリは「インターネットまたは社外リポジトリの仕様変更/障害の影響を受けない」というメリットがあります。例えば、”yum install munin”のような操作をした際に、DNSやインターネット回線に障害が発生すると、正常なインストールができなくなってしまいます。また、リポジトリ側のURL変更のような仕様変更が発生すると、今まで正常に動いていたインストール処理が突然失敗してしまいます。しかし、LAN内にリポジトリを作成すれば、安定したインストール処理を行う事ができます。

yumリポジトリに関して言えば、社外リポジトリの仕様変更は滅多にありません。しかし、サードパーティ製リポジトリ ( 例 : rubygems, php pearなど ) は障害も多いし仕様変更も多いです。ですので、yumに関して言えばあまり関係ない話ですが、オーケストレーションの文脈では「社外の仕様変更リスク」は充分な設計が必要になるポイントです。

rsyncによるリポジトリ作成

リポジトリを作成する最も簡単な方法は、rsyncでリポジトリをそのままコピーしてしまう方法です。まずは、CentOS公式サイトを訪れて、rsyncに対応したミラーを探します。

centos_rsync_mirrors_001

rsyncを用いてリポジトリをコピーします。以下は、CentOSのbase, updatesリポジトリをコピーするコマンド例です。なお、コピーするリポジトリのURLはOSバージョンやCPUアーキテクチャに応じて適宜変更して下さい。

# mkdir -p /var/www/html/centos/6/os/x86_64/
# mkdir -p /var/www/html/centos/6/updates/x86_64/
# rsync -av rsync://ftp.jaist.ac.jp/pub/Linux/CentOS/6/os/x86_64/ /var/www/html/centos/6/os/x86_64/
# rsync -av rsync://ftp.jaist.ac.jp/pub/Linux/CentOS/6/updates/x86_64/ /var/www/html/centos/6/updates/x86_64/

パーミッションの設定も忘れずに行いましょう。

# chown apache:apache -R /var/www/html/centos

最後に/etc/yum.repo.d/CentOS-Base.repoに記述されたリポジトリのURLを変更する事で、LAN内リポジトリ環境の構築完了です。baseurlの部分を適当な値に書き換えて下さい。

[base]
name=CentOS-$releasever - Base
baseurl=http://192.168.XX.XX/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://192.168.XX.XX/updates/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

reposyncによるリポジトリ作成

リポジトリのコピーを作成するには、reposyncとcreaterepoコマンドを使用すると非常に便利です。まず、reposync, createrepoコマンドが使用可能になるように、以下のパッケージをインストールします。

# yum install yum-utils createrepo

reposyncは/etc/yum.confで定義されたリポジトリのミラーを作成するコマンドです。-r (–repoid)でリポジトリ名を指定して使用します。以下はepelのミラー作成例です。

[root@localhost ~]# cd /var/www/html
[root@localhost html]# reposync -r epel
[epel: 1     of 10513 ] Downloading 2ping-2.0-2.el6.noarch.rpm
2ping-2.0-2.el6.noarch.rpm                               |  34 kB     00:00
[epel: 2     of 10513 ] Downloading 389-admin-1.1.35-1.el6.i686.rpm
389-admin-1.1.35-1.el6.i686.rpm                          | 343 kB     00:00
[epel: 3     of 10513 ] Downloading 389-admin-1.1.35-1.el6.x86_64.rpm
389-admin-1.1.35-1.el6.x86_64.rpm                        | 346 kB     00:00
[epel: 4     of 10513 ] Downloading 389-admin-console-1.1.8-1.el6.noarch.rpm
389-admin-console-1.1.8-1.el6.noarch.rpm                 | 202 kB     00:00
[epel: 5     of 10513 ] Downloading 389-admin-console-doc-1.1.8-1.el6.noarch.rpm
389-admin-console-doc-1.1.8-1.el6.noarch.rpm             |  43 kB     00:00
[epel: 6     of 10513 ] Downloading 389-adminutil-1.1.19-1.el6.i686.rpm
389-adminutil-1.1.19-1.el6.i686.rpm                      |  66 kB     00:00
[epel: 7     of 10513 ] Downloading 389-adminutil-1.1.19-1.el6.x86_64.rpm
389-adminutil-1.1.19-1.el6.x86_64.rpm                    |  66 kB     00:00
[epel: 8     of 10513 ] Downloading 389-adminutil-devel-1.1.19-1.el6.x86_64.rpm
389-adminutil-devel-1.1.19-1.el6.x86_64.rpm              |  25 kB     00:00

 <omitted>

reposyncは単純にRPMのコピーだけを行うだけのコマンドです。yumによるパッケージ検索を行うには、リポジトリの情報を定義したXMLファイルも設ける必要があります。このXMLファイルを手作業で作成するのは非常に難しいので、createrepoというコマンドを使用します。

以下のような要領で、createrepoコマンドを実行します。すると、リポジトリの定義情報である”./repodata/repomd.xml”が作成されている事が分かります。

[root@localhost ~]# createrepo /var/www/html/epel/
Spawning worker 0 with 10513 pkgs
Workers Finished
Gathering worker results

Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@localhost ~]#
[root@localhost ~]# ls -l /var/www/html/epel/repodata/
total 104
-rw-r--r-- 1 root root 21241 Oct 16 00:18 039deb0e6720939c34303d5bcc8a65ded714121dddade6f21b4d3c590842b3b6-primary.sqlite.bz2
-rw-r--r-- 1 root root  9159 Oct 16 00:18 145d514a178ac6278553db0935659864b6b5f9a0df0aba1dc8adc46b9b05d96e-primary.xml.gz
-rw-r--r-- 1 root root  9384 Oct 16 00:18 1fe132ea12b44d6487da00eecbd1e48fca2d420eabcba840b809e70ce7388cc6-other.xml.gz
-rw-r--r-- 1 root root 12801 Oct 16 00:18 429d14c651d98d8ff36d2f1c164fab8cfb3a671ebc3ea461adc4122b8aa879fa-filelists.sqlite.bz2
-rw-r--r-- 1 root root 13888 Oct 16 00:18 d14915648e6a8b170ac08f326d14f95d2ecbc5c0d6e85b6864aa1df9bc443fcb-other.sqlite.bz2
-rw-r--r-- 1 root root  8313 Oct 16 00:18 e974ab6ae85c46c342f552266325e473bdd5a5e1acebc8dd024d2b6fc1a76ca2-filelists.xml.gz
-rw-r--r-- 1 root root  2987 Oct 16 00:18 repomd.xml
[root@localhost ~]#

パーミッションの設定も忘れずに行いましょう。

# chown apache:apache -R /var/www/html/epel

最後に/etc/yum.repo.d/epel.repoに記述されたリポジトリのURLを変更する事で、LAN内リポジトリ環境の構築完了です。baseurlの部分を適当な値に書き換えて下さい。

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://192.168.XX.XX/epel/
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

補足説明です。createrepoコマンドで作成された”./repodata/repomd.xml”にはgroupinstallに関する情報は含まれていない事に注意して下さい。もしgroupinstallが必要となる運用の場合は、前述のrsyncによる構築か、後述のCD-ROMによる構築を検討して下さい。

CD-ROM によるリポジトリ作成

今まで紹介したrsync, reposyncによるリポジトリ構築手順は、比較的セキュリティポリシーの緩い、インターネット接続が可能な環境を前提にした手順になります。

しかし、インターネット接続が許されないようなエンタープライズ環境では、上記手順を遂行する事は非常に難しいかもしれません。そのような環境でお勧めする方法がCD-ROMによるリポジトリ構築です。

CentOSのCD-ROMが物理的に接続されているのならば、以下のようなマウント操作を行います。

# mkdir /var/www/html/CentOS-6.5-x86_64-bin-DVD1
# mount /dev/cdrom /var/www/html/CentOS-6.5-x86_64-bin-DVD1

もし、CentOSがISO形式のデータならば、-o loopオプションを使用してマウントします。

# mkdir /var/www/html/CentOS-6.5-x86_64-bin-DVD1
# mount -o loop CentOS-6.5-x86_64-bin-DVD1.iso /var/www/html/CentOS-6.5-x86_64-bin-DVD1

あとは、/etc/yum.repos.d/CentOS-Media.repoの設定を適宜変更します。baseurlを適切な値に変更し、enabled=1とします。

[c6-media]
name=CentOS-$releasever - Media
baseurl=http://192.168.XX.XX/CentOS-6.5-x86_64-bin-DVD1
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

Tips

yumBackend.py

yumコマンド実行時に、”Existing lock /var/run/yum.pid: another copy is running as pid XXXX.”とのエラーメッセージが、以下のように出力される事があるかもしれません。

[root@oracle ~]# yum search munin
Loaded plugins: refresh-packagekit, security
Existing lock /var/run/yum.pid: another copy is running as pid 2653.
Another app is currently holding the yum lock; waiting for it to exit...
  The other application is: PackageKit
    Memory :  33 M RSS (348 MB VSZ)
    Started: Tue Oct 14 17:21:00 2014 - 17:53:03 ago
    State  : Sleeping, pid: 2653
Another app is currently holding the yum lock; waiting for it to exit...
  The other application is: PackageKit
    Memory :  33 M RSS (348 MB VSZ)
    Started: Tue Oct 14 17:21:00 2014 - 17:53:05 ago
    State  : Sleeping, pid: 2653
^C

Exiting on user cancel.

[root@oracle ~]#

これはpackagekitdと呼ばれるパッケージ管理の常駐プログラムがハングアップしてしまう事に起因する現象です。packagekitdは、Redhat系LinuxをGUI (ランレベル 5)で起動した時に右上に表示される「パッケージ更新のプログラム」です。

以下はOracle Linuxのスクリーンショットですが、右上のバグのアイコンがpackagekitdです。

packagekitd_001

ランレベル 5で発生する不具合なので、GUIをよく使うような環境、例えば、

  • 家庭用としてFedoraを使用する場合
  • OracleやKVMのインストールのためにGUIを立ち上げた場合

のような環境でよく見られる不具合です。

この現象に対する一次対応としては、yumBackend.pyをkillして下さい。そうすれば、親プロセスであるpackagekitdも自動的に終了します。

[root@localhost ~]# ps afx 

 <omitted>

 2651 ?        S      0:00 /usr/sbin/packagekitd
 2653 ?        S      0:00  \_ /usr/bin/python /usr/share/PackageKit/helpers/yum/yumBackend.py get-packages unknown

 <omitted>

[root@localhost ~]# kill -KILL 2653

恒久対応としては、/etc/PackageKit/PackageKit.confという設定ファイルについて、DefaultBackendをyumからnobackendに変更します。設定例は以下の通りです。

--- /etc/PackageKit/PackageKit.conf.bak 2012-12-21 07:15:20.000000000 +0900
+++ /etc/PackageKit/PackageKit.conf     2014-10-28 13:04:56.858274603 +0900
@@ -93,7 +93,7 @@
 # no --backend="foo" option is given to the daemon.
 #
 # default=yum
-DefaultBackend=yum
+DefaultBackend=nobackend

 # Use syslog to audit and log actions where available.
 #

動作確認環境

  • 動作確認日 : 2014/10/16
  • CentOS 6.5 64bit ( Sakura VPS ), Redhat 6.5 64bit ( AWS ), Oracle Linux 6.5 64bit (Virtual Box)

 

タイトルとURLをコピーしました