「yumってなにやってるの?」
運良く(悪く?)三十手前の社会人にも関わらず、私には直属の後輩が出来た事が無い。
ただ、そう遠くない未来に私に後輩が出来たとしよう。
無垢な瞳で冒頭の質問を投げかけられた時、私は正解を答えられる自信が無い。
この非常に格好悪い事態を回避する為、この度yumについて調べてみた。
yumについて真剣に考えてみた
今日まで幾度と無く使用してきた魔法のコマンド、
yum install xxxxx
よくわからないエンジニアを助けてきてくれたyumに敬意を表し、
yumが何をしているのか真剣に調べてみた。
そもそもyumってなに?
ざっくりしたyumのイメージとして、
- パッケージ(apacheとかphpとか)をインストールしてくれる
- パッケージに必要なものもまとめて入れてくれる(依存関係の解決)
- 指定されたどこかのサーバにパッケージを取りにいってる(リポジトリ)
頭が痛くなるような理解度である。
リポジトリについて
まずはパッケージを探しに行く先であるリポジトリについて、 /etc/yum.repo.d/以下に定義されている。
色々試してみた
CentOS-Base.repoに記述されていたもの全てにenabled=0をつけてみた。 この状態でyum installを使ってみる。
# yum install tree Loaded plugins: fastestmirror, security Setting up Install Process Loading mirror speeds from cached hostfile Nothing to do
有効なリポジトリが無いのでyumは何も出来ない。
次にCentOS-Base.repoをコピーした、Testを置いてみたが同様のエラーが発生。
なのでTest.repoに名前を変更した結果が以下
# yum install httpd Loaded plugins: fastestmirror, security Setting up Install Process Repository base is listed more than once in the configuration Repository updates is listed more than once in the configuration Repository extras is listed more than once in the configuration Repository centosplus is listed more than once in the configuration Repository contrib is listed more than once in the configuration Loading mirror speeds from cached hostfile Nothing to do
怒られたが反応は変わった。どうやらxxxx.repoの形式であれば反応してくれるらしい。
Test.repoのenabled=0を外し、base等をtest1~3に変更してみた。
# yum install httpd Loaded plugins: fastestmirror, security Setting up Install Process Loading mirror speeds from cached hostfile * test1: www.ftp.ne.jp * test2: mirror.oasis.onnetcorp.com * test3: www.ftp.ne.jp test1 | 3.7 kB 00:00 test2 | 3.4 kB 00:00 test3 | 3.4 kB 00:00 Resolving Dependencies There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them. --> Running transaction check ---> Package httpd.x86_64 0:2.2.15-47.el6.centos.4 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================= Package Arch Version Repository Size ======================================================================================================================================================= Installing: httpd x86_64 2.2.15-47.el6.centos.4 test2 831 k Transaction Summary ======================================================================================================================================================= Install 1 Package(s) Total download size: 831 k Installed size: 2.9 M Is this ok [y/N]:
動いたbaseとかupdatesじゃなくても問題無いらしい。 どうやら[base]とかの記載は/var/cache/yum/以下に作成されるディレクトリの名前だけな気がする。
specファイルについて
普段はろくに考えもせず、 EPELとかremiとか追加しているのだが、
ちゃんと挙動を理解した上で、必要そうな作業をやってみる事にした。
で今回調べててはじめて知ったのが、specファイルの存在。
specファイルに記述されている内容に従って、
yumやrpmはパッケージをインストールしているらしい。
いつもEPELリポジトリを追加するときは、
#yum install epel-release or #rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
って何も考えずにやっていました。
specファイルはソースの中にあるらしいので、
以下コマンドで入手&取り出しを試みる。
#yumdownloader --source epel-release #mkdri epel-test #cd epel-test #rpm2cpio ../epel-release-6-8.src.rpm |cpio -id #ls GPL RPM-GPG-KEY-EPEL-6 epel-release.spec epel-testing.repo epel.repo macros.ghc-srpm
さっそくspecファイルの中身を見てみる。
#cat epel-release.spec Name: epel-release Version: 6 Release: 8 Summary: Extra Packages for Enterprise Linux repository configuration Group: System Environment/Base License: GPLv2 # This is a Red Hat maintained package which is specific to # our distribution. Thus the source is only available from # within this srpm. URL: http://dl.fedoraproject.org/pub/epel/ Source0: http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6 Source1: GPL Source2: epel.repo Source3: epel-testing.repo Source4: macros.ghc-srpm BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch Requires: redhat-release >= %{version} Conflicts: fedora-release %description This package contains the Extra Packages for Enterprise Linux (EPEL) repository GPG key as well as configuration for yum and up2date. %prep %setup -q -c -T install -pm 644 %{SOURCE0} . install -pm 644 %{SOURCE1} . %build %install rm -rf $RPM_BUILD_ROOT #GPG Key install -Dpm 644 %{SOURCE0} \ $RPM_BUILD_ROOT%{_sysconfdir}/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 # yum install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/yum.repos.d install -pm 644 %{SOURCE2} %{SOURCE3} \ $RPM_BUILD_ROOT%{_sysconfdir}/yum.repos.d # rpm macros for koji install -Dpm 644 %{SOURCE4} \ $RPM_BUILD_ROOT%{_sysconfdir}/rpm/macros.ghc-srpm %clean rm -rf $RPM_BUILD_ROOT %post # Not needed for el6 as sources has been removed #echo "# epel repo -- added by epel-release " \ # >> %{_sysconfdir}/sysconfig/rhn/sources #echo "yum epel http://download.fedora.redhat.com/pub/epel/%{version}/\$ARCH" \ # >> %{_sysconfdir}/sysconfig/rhn/sources %postun #sed -i '/^yum\ epel/d' %{_sysconfdir}/sysconfig/rhn/sources #sed -i '/^\#\ epel\ repo\ /d' %{_sysconfdir}/sysconfig/rhn/sources %files %defattr(-,root,root,-) %doc GPL %config(noreplace) /etc/yum.repos.d/* /etc/pki/rpm-gpg/* /etc/rpm/macros.ghc-srpm
そんなわけで、なんとなくyum/rpm周りの動きが見えてきた。
次回は実践編でspecファイルであれこれしてみようと思います。