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

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

yum install(search)できない対応メモ - イントラ内や内部リポジトリに向いてるyumを--enablerepoオプションを使って一時的に任意のリポジトリを参照してインストールする

はじめに

yumでインストールできない場合のメモ。
yum installでインストールできない場合って、いくつか理由が考えられます。

今回の例は上記でいうところの4行目の事例についての対応方法メモです

ちなみに、こういうパターンは社内やプロジェクトのイントラリポジトリ(内部リポジトリ)からyum installする設定になってる場合なんかが多いです。

ながれ

  1. yumが自前リポジトリしか向いてない状況確認
  2. 対応してインストールしてみる

また、今回はlocateコマンドをいれようとしたら
yumが自前リポジトリしか向いてなかったという体で話しを進めます。

1. yumが自前リポジトリしか向いてない状況確認

いつもどおりlocateをyumでいれようとしてみる
※ おもむろにlocate
# locate bin/perl
zsh: command not found: locate

※ 無いのでyum searchからのinstallを試みる
# yum search locate
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
intra-repo                                                                                 | 1.9 kB     00:00     
========================================================= N/S Matched: locate ==========================================================
perl-File-ShareDir.noarch : Locate per-dist and per-module shared files
which.x86_64 : Displays where a particular program in your path is located

  Name and summary matches only, use "search all" for everything.

※ でてこない!
リポジトリ関連を確認
コマンドで確認

コマンドで確認する場合は
* yum repolistで有効なリポジトリのリスト
* yum repolist allで有効なリポジトリのリストとステータス
を確認できます。

※ リポジトリのリストを確認
# yum repolist
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
intra-repo                                                                                                             | 1.9 kB     00:00     
repo id                                              repo name                                                                    status
intra-repo                                           intra dev $relreasever - x86_64                                              1,531
repolist: 1,531

※ リポジトリのリストとステータスを確認
# yum repolist all
Loading mirror speeds from cached hostfile
intra-repo                                                                                                             | 1.9 kB     00:00     
repo id                                           repo name                                                               status
base                                              CentOS-6 - Base                                                         disabled
c6-media                                          CentOS-6 - Media                                                        disabled
centosplus                                        CentOS-6 - Plus                                                         disabled
contrib                                           CentOS-6 - Contrib                                                      disabled
debug                                             CentOS-6 - Debuginfo                                                    disabled
extras                                            CentOS-6 - Extras                                                       disabled
intra-repo                                        intra dev $relreasever - x86_64                                         enabled: 1,531
updates                                           CentOS-6 - Updates                                                      disabled
repolist: 1,531

※ 案の定baseリポジトリが出てこない!
設定ファイルで確認

だいたい/etc/yum.repos.d配下に設定があると思うので見てみます

# pwd
/etc/yum.repos.d

※ 設定ファイルとか
# ls -al
-rw-r--r--   1 root root  1962  5月 29 19:07 2013 CentOS-Base.repo
-rw-r--r--   1 root root   637 12月  9 12:05 2011 CentOS-Debuginfo.repo
-rw-r--r--   1 root root   626 12月  9 12:05 2011 CentOS-Media.repo
-rw-r--r--   1 root root   403  8月 30 03:35 2012 intra.repo

※ 中身を確認。[ ]で囲われてる文字列がリポジトリ名
※ enabledの値に注目。1:有効、0:無効、設定無し=有効
# cat CentOS-Base.repo
・・・省略・・・
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled = 0
・・・省略・・・


※ 内部リポジトリの設定を確認
# cat intra.repo
[intra-repo]
name=intra dev $relreasever - $basearch
baseurl=http://yum.hoge.fuga.ne.jp/intra-rpms/rhel$releasever/$basearch/
enabled=1
gpgcheck=0
http_caching=none
metadata_expire=0

2. 対応してインストールしてみる

対応方針を決める

今回のパターンはリポジトリ(の設定)はすでにあるので、
これに対応する方法は主に下記2点あります

  1. yumコマンドのオプションで一時的にリポジトリを有効にする
  2. 設定を変えちゃう

2. 設定を変えちゃうもできそうですが、
1のほうがおおもとの設定を崩さず一時的で簡単なのでそちらでやります。

やってみる

locateはyum searchるとmlocateという名前でみつかるので
インストールする場合はその名前で行います。
参考:vagrantで立ち上げたCentOS 6.5にlocateコマンドが無かったのでyum install mlocateで入れるメモ

※ この後の違いをみるために再度オプション無しでyum searchってみる
# yum search locate
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
intra-repo                                                                                 | 1.9 kB     00:00     
========================================================= N/S Matched: locate ==========================================================
perl-File-ShareDir.noarch : Locate per-dist and per-module shared files
which.x86_64 : Displays where a particular program in your path is located

  Name and summary matches only, use "search all" for everything.

※ オプションありでsearchってみる
# yum search --enablerepo=base locate
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
base                                                                                       | 3.7 kB     00:00     
base/primary_db                                                                            | 4.6 MB     00:00     
intra-repo                                                                                 | 1.9 kB     00:00     
========================================================= N/S Matched: locate ==========================================================
mlocate.x86_64 : An utility for finding files by name
perl-File-ShareDir.noarch : Locate per-dist and per-module shared files
which.x86_64 : Displays where a particular program in your path is located

  Name and summary matches only, use "search all" for everything.

※ mlocateがみつかったのでオプションつければインストールできそう
# sudo yum install --enablerepo=base mlocate.x86_64
・・・省略・・・
Running Transaction
  Installing : mlocate-0.22.2-4.el6.x86_64                                                                                          1/1 

Installed:
  mlocate.x86_64 0:0.22.2-4.el6                                                                                                         

Complete!

※ locateが使うdb情報更新
# sudo updatedb

※ locateつかってみる
# locate bin/perl
/home/hoge/.cpanm/work/1365073612.337/Perl-Critic-1.118/bin/perlcritic
/home/hoge/.cpanm/work/1365073612.337/Perl-Tidy-20121207/bin/perltidy
/home/hoge/perl5/perlbrew/bin/perlbrew
/home/hoge/perl5/perlbrew/perls/perl-5.10.1/bin/perl
/home/hoge/perl5/perlbrew/perls/perl-5.10.1/bin/perl5.10.1
/home/hoge/perl5/perlbrew/perls/perl-5.10.1/bin/perlbug
/home/hoge/perl5/perlbrew/perls/perl-5.10.1/bin/perldoc
/home/hoge/perl5/perlbrew/perls/perl-5.10.1/bin/perlivp
/home/hoge/perl5/perlbrew/perls/perl-5.10.1/bin/perlthanks
/home/hoge/perl5/perlbrew/perls/perl-5.16/bin/perl
/home/hoge/perl5/perlbrew/perls/perl-5.16/bin/perl5.16.3
/home/hoge/perl5/perlbrew/perls/perl-5.16/bin/perlbug
/home/hoge/perl5/perlbrew/perls/perl-5.16/bin/perldoc
/home/hoge/perl5/perlbrew/perls/perl-5.16/bin/perlivp
/home/hoge/perl5/perlbrew/perls/perl-5.16/bin/perlthanks
/usr/bin/perl
/usr/bin/perl5.8.8
/usr/bin/perlbug
/usr/bin/perlcc
/usr/bin/perldoc
/usr/bin/perlivp
/usr/bin/perlstack
/usr/bin/perlstack_ptrace

ということで無事yumインストールできました!

参考

まとめ

設定を直す手順も加えようかと思ったんですが長くなるのでやめましたw

こういうケースは
会社やプロジェクトでイントラ内や内部リポジトリを設定してると思うので
自分だけが欲しいものは一時的に有効にしてインストールするほうが
問題も起きなくて良いですよね!

というメモでした