Yum

はじめに

第8章はじめに

yumプログラムは、下位のrpmプログラムを使用し、高レベルでインテリジェントなサービスを提供します。パッケージのインストール、更新、削除時に、依存関係を自動的に解決できます。外部ソフトウェア リポジトリにアクセスして同期を取り、必要に応じてソフトウェアを取得してインストールします。


学習目標
この章の終わりまでに、次のことができるようになります。 

パッケージ インストーラーとその特性について説明できます。
yumが、高レベルのパッケージ管理システムとしてどのように機能するかを説明できます。
リポジトリを使用するようにyumを構成できます。
yumを使用できるクエリについて説明できます。
yumを使用してパッケージを検証、インストール、削除、およびアップグレードできます。
追加のコマンドと新しいリポジトリのインストール方法に精通します。
Fedoraにおけるyumの後継であるdnfの使用方法を理解できます。


Yum

パッケージ インストーラー
rpmやdpkgなどの低レベルのパッケージ ユーティリティは、特定のソフトウェア パッケージ ファイルのインストールとインストール済みのソフトウェアを管理します。

高レベルのパッケージ管理システム（yum、dnf、apt、zypperなど）には、利用可能なソフトウェアのデータベースと連携し、非常に洗練された方法でソフトウェアを、検索、インストール、更新、アンインストールするツールが組み込まれています。それらは、

ローカルとリモートの両方のリポジトリをソースとして使用して、バイナリとソース ソフトウェア パッケージのインストールと更新を行ないます。
ソフトウェア パッケージのインストール、アップグレード、削除を自動化するために使用されます。
依存関係を自動的に解決します。
パッケージを手動でダウンロードしたり依存関係情報を個別に検索したりする必要がないため、時間を節約できます。

ソフトウェア リポジトリは、ディストリビューションとその他の独立したソフトウェア プロバイダによって提供されます。パッケージ インストーラーは、リポジトリが保持しているカタログから派生した、利用可能なソフトウェアのデータベースを維持します。低レベルのパッケージ ツールとは異なり、依存関係を自動的に検索してインストールする機能があります。これは重要な機能です。

このセクションでは、yumとdnfについて説明します。zypperとaptはこの後のセクションで説明します。


yumとは？
yumはrpmのフロントエンドを提供します。主な機能は、複数のリモート リポジトリからパッケージを取得し、パッケージ間の依存関係を解決することです。RHEL、CentOS、Scientific Linux、Fedoraなど、rpmを使用するディストリビューションの大部分で使用されています（すべてではありません）。

yumはパフォーマンスを高速化するために、情報とデータベースをキャッシュします。キャッシュされた情報の一部またはすべてを削除するには、次のコマンドを実行します。

$ yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

yumには、/usr/bin/yum*と/usr/sbin/yum*の下に、いくつかの拡張モジュール（プラグイン）と関連プログラムがあります。

ここではyumのコマンド ラインについて説明し、ディストリビューションが提供するグラフィカル インターフェイスについては説明しません。

リポジトリの構成ファイルは/etc/yum.repos.d/に保持され、拡張子は.repoです。たとえば、RHEL 7システムには次のものがあります。

yumリポジトリ

非常にシンプルなリポジトリ ファイルは次のようになります。

[repo-name]
    name=Description of the repository
    baseurl= http://somesystem.com/path/to/repo
    enabled=1

より複雑な例は/etc/yum.repos.dにありますので、調べてみるとよいでしょう。

enabledの値を0または1への変更するか、yumを使用するときに--disablerepo=somerepoと--enablerepo=somerepoオプションを使用することにより、特定のリポジトリの使用のオンとオフを切り替えることができます。

gpgcheck変数を使用して整合性チェックを無効にすることもできます（ですが、すへきではありません）。


クエリ
rpmと同様に、yumは検索などのクエリに使用できます。ローカル システムに存在するものだけでなく、リモート リポジトリも検索できます。

名前にキーワードを含むパッケージを検索します。

$ sudo yum search keyword
$ sudo yum list "*keyword*"

これら2つのコマンドは、少し異なる情報を提供します。最初のコマンドはパッケージの詳細情報を表示し、2番目のコマンドはインストールされているものとその他の利用可能なものを表示にします。

パッケージに関する情報を表示すコマンドは以下です。

$ sudo yum info package

情報には、サイズ、バージョン、リポジトリのソースのURL、および詳細な説明が含まれます。上記を含むほとんどのyumコマンドでは、「yum info libc*」のようにワイルド カードの指定ができます。rpm -qを使用したクエリとは異なり、パッケージはインストールされている必要はありません。

以下のコマンドは、全てのパッケージ、もしくはインストールされているものだけ、存在しているもの、更新が必要だがインストールされていないものをリストします。

$ sudo yum list [installed | updates | available ]

インストール済み、利用可能、または更新が必要なパッケージ グループに関する情報を表示するコマンドは以下です。

$ sudo yum grouplist

パッケージ グループの情報を表示するには：

$ sudo yum groupinfo packagegroup

特定のファイル名を含むパッケージを表示するコマンドは以下です。

$ sudo yum provides /path/to/file

ファイル名に少なくとも1つの/を使用する必要があることに注意してください。そうしないと混乱します。


パッケージの検証
パッケージの検証には、yum-plugin-verifyパッケージのインストールが必要です。もしインストールする必要がある場合、そのコマンドは以下となります。

$ sudo yum install yum-plugin-verify

これはyumのプラグインであり、実行可能ファイルではないことに注意してください。yumには他にも多くのプラグインが用意されており、使用できるコマンドと引数の組み合わせを拡張できます。

例えば、ほとんどの情報を提供しているパッケージを検証する場合：

$ sudo yum verify [package]

rpm -Vと全く同じことをする場合：

$ sudo yum verify-rpm [package]

構成ファイルを含むすべての違いをリストする場合：

$ sudo yum verify-all [package]

引数がない場合、上記のコマンドはシステムにインストールされているすべてのパッケージを検証します。

デフォルトでは、検証コマンドは構成ファイルを無視します。これは通常の正しい使用でも変更される可能性があるからです。他にもいくつかのオプションがあります。 man yum-verifyを参照してください。

🚩
dnfには同等の検証プラグイン コマンドまたはオプションはありません。


パッケージのインストール／削除／アップグレード
次に、一般的な操作の実行例をいくつか見てみましょう。

リポジトリから1つ以上のパッケージをインストールし、必要な依存関係を解決してインストールする場合：

$ sudo yum install package1 [package2]

ローカルrpmからインストールする場合：

$ sudo yum localinstall package-file

これは以下のコマンドとまったく同じではありません。

$ rpm -i package-file

yumの方は、リモート リポジトリにアクセスして依存関係を解決しようとします。

リポジトリから特定のソフトウェア グループをインストールし、グループ内の各パッケージに必要な依存関係を解決してインストールする場合：

$ sudo yum groupinstall group-name

または

$ sudo yum install @group-name

システムからパッケージを削除する場合：

$ sudo yum remove package1 [package2]

yumは要求されたパッケージだけでなく、それらに依存するすべてのパッケージも削除するため、パッケージの削除には注意が必要です！削除を望まない場合もあります。したがってyum removeでは、依存性を気にせず確認なしで削除する-yオプションを指定する実行はしないでください。

リポジトリからパッケージを更新する場合：

$ sudo yum update [package]

パッケージ名が指定されていない場合、すべてのパッケージが更新されます。

インストール（または更新）中にパッケージに更新された構成ファイルを見つけると、古い構成ファイルの名前を.rpmsave拡張子に変更します。古い構成ファイルを新しいソフトウェアで引き続き使用する場合は、新しい構成ファイルの名前に.rpmnew拡張子を付けます。これらのファイル名拡張子を（ほとんどの場合、/etcサブディレクトリのツリー内で）検索して、何らかの調整を行う必要があるかどうかを調べる場合：

$ sudo find /etc -name "*.rpm*"

これは、基本的なrpmユーティリティの動作と同じですが、参考のためにここで触れておきます。


yumの追加コマンド
インストールされているプラグインにより、yumの追加機能が不足することはありません。プラグインをすべてリストする場合：

$ sudo yum list "yum-plugin*"

有効なすべてのリポジトリのリストを表示する場合：

$ sudo yum repolist

複数のYUMコマンドを実行する対話型シェルを開始する場合：

$ sudo yum shell [text-file]

text-fileが指定されている場合、yumは端末からではなくそのファイルからコマンドを読み取って実行します。

パッケージをダウンロードしますが、インストールはしません。それらを/var/cache/yumディレクトリ、または指定可能な別のディレクトリに保存する場合：

$ sudo yum install --downloadonly package

または、インストール コマンドの発行後にプロンプトが表示されたら、「y」や「n」の代わりに「d」と入力します。--downloaddir= オプションを使用しない場合は、パッケージは、/var/cache/yumの下のダウンロード元のリポジトリに応じた場所にダウンロードされます。依存関係を満たすために、他の必要なパッケージもダウンロードされます。

yumコマンドを使って履歴を表示することができます、また、以前のコマンドのオプションを修正し再実行したり、戻したりする場合：

$ sudo yum history


dnf
dnfは、yumの後継という位置付けのもので、RHEL 8のyumを基にしています。

Fedoraシステムでdnfの使用法を少しずつ学ぶことができます。というのも、Fedoraシステムは日々のタスク処理の大部分にyumコマンドのサブセットを利用しており、yumの各用途はdnfと同じであると言われているからです。

詳細については、「Using the DNF software package manager 」と「DNF, the next-generation replacement for yum」を参照してください。


デモ：yumとdnfユーティリティの使用方法

このビデオは、yumユーティリティとdnfユーティリティの使用方法を示します。


演習

演習の要件

次の演習を実行するには、RHEL 7やCentOS 7など、yumベースのシステムにアクセスできる必要があります。Fedora、RHEL 8、またはCentOS 8では、dnf を yum の代わりに使えば、その後のコマンドや説明は同じです、dnf は後方互換性があります。


課題 8.1:YUM基本コマンド

🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

Exercise 8.1: Basic YUM Commands

1.  Check to see if there are any available updates for your system.
2.  Update a particular package.
3.  List all installed kernel-related packages, and list all installed or available ones.
4.  Install thehttpd-develpackage, or anything else you might not have installed yet. Doing a simple:
$ sudo yum list
will let you see a complete list; you may want to give a wildcard argument to narrow the list.

Solution 8.1
1.$ sudo yum update
$ sudo yum check-update
$ sudo yum list updates
Only the first form will try to do the installations.
2.$ sudo yum update bash
3.$ sudo yum list installed "kernel*"
$ sudo yum list "kernel*"
4.$ sudo yum install httpd-devel


課題 8.2:yumを使って、パッケージの情報を得る

🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

Exercise 8.2: Using yum to Find Information About a Package

Usingyum(and notrpmdirectly), find:
1.  All packages that contain a reference to bash in their name or description.
2.  Installed and available bash packages.
3.  The package information forbash.
4.  The dependencies for the bash package.

Try the commands you used above both asrootand as a regular user. Do you notice any difference?

Solution 8.2
Please Note
Depending on your distribution version, you may get some permission errors if you do not use sudo with the following commands, even though we are just getting information.
$ sudo yum search bash
$ sudo yum list bash
$ sudo yum info bash
$ sudo yum deplist bash


課題 8.3:yumを使って、パッケージ グループを管理する

🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

Exercise 8.3: Managing Groups of Packages with yum

Please Note
On RHEL you may get some permission errors if you don’t use sudo with some of the following commands, even whenwe are just getting information.

yum provides the ability to manage groups of packages.
1.  Use the following command to list all package groups available on your system:
$ yum grouplist
2.  Identify theBackup Clientgroup and generate the information about this group using the command
$ yum groupinfo "Backup Client"
3.  Install using:
$ sudo yum groupinstall "Backup Client"
4.  Identify  a  package  group  that’s  currently  installed  on  your  system  and  that  you  don’t  need.   Remove  it  usingyumgroupremoveas in:
$ sudo yum groupremove "Backup Client"

Note you will be prompted to confirm removal so you can safely type the command to see how it works.
You may find that thegroupremovedoesnotremove everything that was installed; whether this is a bug or a featurecan be discussed.


課題 8.4;新しくyumレポジトリを追加する

🚩
以下のPDFドキュメントに埋め込まれた外部URLにアクセスする場合は、常に右クリックして新しいタブまたはウィンドウで開いてください。直接クリックしてURLを開こうとすると、コース ウィンドウ／タブが閉じます。

Exercise 8.4: Adding a New yum Repository
According to its authors (athttp://www.webmin.com/index.htm):
“Webminis a web-based interface for system administration for Unix.  Using any modern web browser, you can setup useraccounts, Apache, DNS, file sharing and much more. Webmin removes the need to manually edit Unix configuration files like/etc/passwd, and lets you manage a system from the console or remotely.”

We are going to create a repository for installation and upgrade.  While we could simply go the download page and get the current rpm, that would not automatically give us any upgrades.
1.  Create a new repository file calledwebmin.repoin the/etc/yum.repos.ddirectory. It should contain the following:

webmin.repo
[Webmin]
name=Webmin Distribution Neutral baseurl=http://download.webmin.com/download/yum
mirrorlist=http://download.webmin.com/download/yum/mirrorlist
enabled=1
gpgcheck=0

(Note you can also cut and paste the contents from http://www.webmin.com/download.html.)

2.  Install the webmin package.
$ sudo yum install webmi


知識チェック

「第8章 - yum」を完遂しました。おめでとうございます。このクイズに答えて、これまでに学んだ概念の理解度をチェックしてください。

クイズ開始

問題 8.1
yum install <package>は、新しいパッケージをインストールするために使います。True or False?

A. True
B. False

問題 8.2
yum updateは、引数としてパッケージを指定できません。True or False?

A. True
B. False

問題 8.3
yum provides <file path>は、引数として指定されたファイルを含むパッケージの検索には使用できません。True or False?

A. True
B. False

問題 8.4
yum searchは、パッケージ名と短い説明で検索ができます。True or False?

A. True
B. False




