業務でよく使用する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のインストールを例に挙げて、専用リポジトリの追加方法を説明します。
手順は非常に簡単です。公式サイトに書かれている手順のコピペで問題なく動作します。
まず、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に対応したミラーを探します。
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です。
ランレベル 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)