Linux における YUM を使用したパッケージのクエリと更新

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、RHEL ベースの Linux システムにおいて、YUM パッケージマネージャーを使用してソフトウェアパッケージを管理するための基本的なスキルを学びます。まず、yum list および yum deplist コマンドを使用して、現在インストールされているパッケージの詳細や依存関係を調査します。また、yum repolist を使用してシステムに設定されているソフトウェアリポジトリを確認し、ソフトウェアの入手元や利用可能なパッケージについて理解を深めます。

これらの基礎スキルを習得した後は、システムのメンテナンスと更新に焦点を当てます。yum check-update を使用して、新しいバージョンが利用可能なパッケージを特定する方法を学びます。最後に、特定のパッケージのみを更新する方法と、システム全体を包括的に更新する方法の違いを学び、環境を安全かつ最新の状態に保つための実践を行います。

'yum list' と 'yum deplist' によるインストール済みパッケージの調査

このステップでは、CentOS やその他の RHEL ベースの Linux ディストリビューションで標準的なパッケージマネージャーである yum を使用して、インストール済みパッケージを調査する方法を学びます。まずは、現在使用しているシェル環境を提供する bash パッケージを例に調査を進めます。これらのコマンドは、システムに何がインストールされているか、またパッケージが機能するためにどのようなコンポーネントに依存しているかを理解するのに役立ちます。

まず、yum list コマンドを使用して、特定のパッケージの状態を確認します。このコマンドにより、パッケージがインストールされているかどうか、およびシステム上のバージョンを確認できます。

実験の検証を確実に行うため、調査結果を /home/labex/project に保存します。bash パッケージの詳細を確認するには、ターミナルで以下のコマンドを実行してください。

sudo yum list bash | tee /home/labex/project/bash-package.txt

以下のような出力が表示され、bash がインストールされていることが確認できます。リポジトリ列の @ 記号(例:@anaconda@System)は、そのパッケージがインストール済みであることを示しています。

Installed Packages
bash.x86_64    <version>    @anaconda

次に、依存関係(dependencies)の概念について学びます。ほとんどのソフトウェアパッケージは単独で完結しているわけではなく、正しく動作するためにライブラリやツールなどの他のパッケージを必要とします。これらの必要なパッケージを「依存関係」と呼びます。yum deplist コマンドを使用すると、特定のパッケージの全依存関係リストを表示できます。

bash パッケージが依存しているすべてのパッケージを確認するには、以下のコマンドを実行します。

sudo yum deplist bash | tee /home/labex/project/bash-deplist.txt

出力には、各依存関係とそれを提供するパッケージがリストされます。これは、yum がどのようにソフトウェアのインストールを解決・管理しているかを理解するために非常に重要です。

package: bash.x86_64 <version>
  dependency: /bin/sh
   provider: bash.x86_64 <version>
  dependency: chkconfig
   provider: chkconfig.x86_64 <version>
  dependency: coreutils
   provider: coreutils.x86_64 <version>
  dependency: libc.so.6(GLIBC_2.15)(64bit)
   provider: glibc.x86_64 <version>
... (output truncated) ...

yum listyum deplist を使用することで、システムにインストールされているパッケージとその相互関係を明確に把握できるようになります。

'yum repolist' によるリポジトリと利用可能なパッケージの探索

このステップでは、yum がパッケージの検索やインストールに使用するソフトウェアの供給源である「リポジトリ(repositories)」を探索する方法を学びます。また、システムにインストール可能な新しいパッケージを検索する方法も学びます。

パッケージリポジトリとは、ソフトウェアパッケージが保管されている中央集権的なストレージ場所です。yum にパッケージのインストールを指示すると、設定されたリポジトリにアクセスし、必要なファイルをダウンロードしてシステムにインストールします。

現在システムで有効になっているリポジトリのリストを表示するには、yum repolist コマンドを使用します。これは、どのソフトウェアソースがアクティブかを確認するのに便利です。

ターミナルで以下のコマンドを実行し、出力を保存して後で確認できるようにします。

sudo yum repolist | tee /home/labex/project/yum-repolist.txt

出力には、リポジトリ ID、名前、および含まれているパッケージ数が表示されます。以下のような形式になります。

repo id                                                                                                                          repo name
rhui-rhel-9-for-x86_64-appstream-rhui-rpms                                                                                       Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs)
rhui-rhel-9-for-x86_64-baseos-rhui-rpms                                                                                          Red Hat Enterprise Linux 9 for x86_64 - BaseOS from RHUI (RPMs)

yum がどこからパッケージを探しているかがわかったところで、インストール可能なパッケージを確認してみましょう。yum list available コマンドは、有効なリポジトリ内にあり、まだシステムにインストールされていないすべてのパッケージを表示します。

yum list available をそのまま実行すると非常に長いリストが表示されるため、特定のものを検索する方が実用的です。ここでは、Linux カーネルに関連する利用可能なパッケージを検索してみましょう。ワイルドカード(*)を使用して、複数のパッケージ名にマッチさせることができます。

以下のコマンドを実行して、kernel で始まるすべての利用可能なパッケージをリストアップします。

sudo yum list available 'kernel*' | tee /home/labex/project/yum-kernel-available.txt

kernel* をシングルクォートで囲むことは、シェル自体がワイルドカードを展開しようとするのを防ぐために重要です。出力には、利用可能なカーネル関連パッケージのリスト、バージョン、およびその入手先リポジトリが表示されます。

Available Packages
kernel-devel.x86_64      <version>      updates
kernel-doc.noarch        <version>      updates
kernel-headers.x86_64    <version>      updates
... (output truncated) ...

これらのコマンドは、システムのソフトウェアを管理し、ソフトウェアソースを確認したり、インストールすべき新しいツールを発見したりするために不可欠です。

'yum check-update' による利用可能な更新の確認

このステップでは、システムにインストールされているパッケージに対して利用可能なソフトウェア更新を確認する方法を学びます。システムを最新の状態に保つことは、セキュリティと安定性のために極めて重要です。更新には多くの場合、脆弱性の修正パッチ、バグ修正、新機能が含まれているためです。

yum check-update コマンドは、インストール済みパッケージのうち、リポジトリに新しいバージョンが存在するものを安全に確認する方法を提供します。このコマンドは更新を「リスト表示」するだけで、ダウンロードやインストールは行わない点に注意してください。これにより、変更を適用する前に内容を確認できます。

システム上のすべての利用可能な更新を確認するには、ターミナルで以下のコマンドを実行します。|| true を付加しているのは、yum check-update が更新ありを示すステータス 100 を返した際に、シェルが停止するのを防ぐためです。

sudo yum check-update | tee /home/labex/project/yum-check-update.txt || true

yum は有効なすべてのリポジトリに接続し、パッケージ情報のローカルキャッシュを更新して、インストール済みパッケージのバージョンと最新バージョンを比較します。

更新が利用可能な場合、以下のようなリストが表示されます。各行にはパッケージ名、新しいバージョン、および更新元のリポジトリが表示されます。

bind-libs.x86_64                 <version>      updates
bind-license.noarch              <version>      updates
curl.x86_64                      <version>      updates
glibc.x86_64                     <version>      updates
glibc-common.x86_64              <version>      updates
... (output truncated) ...

システムが完全に最新の状態であれば、コマンドは何も表示せずに終了します。このコマンドは日常的なシステムメンテナンスの基本であり、次のステップで実際の更新プロセスに進む前に、システムの現状を正確に把握するために役立ちます。

'yum update ' による単一パッケージの更新

このステップでは、特定のパッケージの更新を適用します。前のステップで yum check-update を使用して更新可能なパッケージのリストを確認しました。システム全体を一度に更新するのが一般的ですが、特定のパッケージのみを更新したい場合もあります。これにより、システムへの変更をより細かく制御できます。

先ほど確認したリストから更新するパッケージを選びましょう。ここでは、データ転送によく使われるツールである curl を例にします。もし curl がリストにない場合は、リストにある別のパッケージを選択してください。

パッケージを更新する前に、更新可能なバージョンがある状態にするため、一度 curl をダウングレードします。

sudo yum downgrade -y curl

curl パッケージのみを更新するには、以下のコマンドを実行します。

sudo yum update curl | tee /home/labex/project/curl-update.txt

yumcurl の依存関係を解決し、更新が必要なものを判断して、トランザクションの概要を表示します。この概要には、更新されるパッケージと合計ダウンロードサイズが表示されます。

Resolving Dependencies
--> Running transaction check
---> Package curl.x86_64 0:<old_version> will be updated
---> Package curl.x86_64 0:<new_version> will be an update
--> Processing Dependency: libcurl = <new_version> for package: curl-<new_version>.x86_64
--> Running transaction check
---> Package libcurl.x86_64 0:<old_version> will be updated
---> Package libcurl.x86_64 0:<new_version> will be an update
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package      Arch         Version              Repository                 Size
================================================================================
Updating:
 curl         x86_64       <new_version>        updates                    <size>
Updating for dependencies:
 libcurl      x86_64       <new_version>        updates                    <size>

Transaction Summary
================================================================================
Upgrade  1 Package (+1 Dependent package)

Total download size: <total_size>
Is this ok [y/d/N]:

変更内容を確認します。進めてもよろしければ y を入力して Enter キーを押してください。yum が更新をダウンロードしてインストールします。

プロセスが完了すると "Complete!" というメッセージが表示され、更新が成功したことが確認できます。

...
Running transaction
  Updating   : libcurl-<new_version>.x86_64                                 1/4
  Updating   : curl-<new_version>.x86_64                                    2/4
  Cleanup    : curl-<old_version>.x86_64                                    3/4
  Cleanup    : libcurl-<old_version>.x86_64                                 4/4
  Verifying  : curl-<new_version>.x86_64                                    1/4
  ...

Updated:
  curl.x86_64 <new_version>

Dependency Updated:
  libcurl.x86_64 <new_version>

Complete!

これで、特定のパッケージとその依存関係を正常に更新できました。このターゲットを絞った更新方法は、システム全体をアップグレードすることなく、特定のセキュリティパッチや機能更新を適用する際に非常に有効です。

'yum update' によるシステム全体の更新

このステップでは、最も一般的かつ重要なパッケージ管理タスクである「システム全体の更新」を実行します。単一パッケージの更新も便利ですが、システム上のすべてのソフトウェアを定期的に更新することは、セキュリティと安定性を維持し、最新の機能やバグ修正を受け取るために不可欠です。

yum update コマンドをパッケージ名を指定せずに実行すると、インストールされているすべてのパッケージと有効なリポジトリ内のバージョンを比較し、新しいバージョンが見つかったすべてのパッケージを更新します。

警告: このプロセスでは大量のデータがダウンロードされる可能性があり、更新の数やネットワーク速度によっては完了までにかなりの時間がかかる場合があります。

システム全体の更新を開始するには、ターミナルで以下のコマンドを実行します。

sudo yum update | tee /home/labex/project/full-system-update.txt

単一パッケージの更新と同様に、yum はまずすべての依存関係を解決し、トランザクションの概要を表示します。更新が必要なすべてのパッケージが含まれるため、リストは先ほどよりもはるかに長くなります。

Resolving Dependencies
--> Running transaction check
... (many packages listed) ...

Dependencies Resolved

================================================================================
 Package               Arch         Version              Repository        Size
================================================================================
Updating:
 bind-libs             x86_64       <version>            updates           <size>
 bind-license          noarch       <version>            updates           <size>
 glibc                 x86_64       <version>            updates           <size>
 glibc-common          x86_64       <version>            updates           <size>
 ... (many more packages) ...

Transaction Summary
================================================================================
Upgrade  <X> Packages

Total download size: <total_size>
Is this ok [y/d/N]:

更新されるパッケージのリストを注意深く確認してください。この練習環境ではすべてのパッケージを更新すると時間がかかりすぎるため、今回は n を入力して更新をスキップしてください。

これで、システム全体の更新トランザクションを確認できました。実際のメンテナンス時には、sudo yum update を再実行し、準備ができたら y を入力してすべての利用可能な更新をインストールします。

まとめ

この実験では、YUM パッケージマネージャーを使用して RHEL ベースの Linux システムでソフトウェアパッケージを管理する基本を学びました。まず yum list でインストール済みパッケージの状態とバージョンを確認し、yum deplist で依存関係を調査しました。また、yum repolist コマンドを使用してアクティブなリポジトリをリストアップし、ソフトウェアの供給源を確認しました。

次に、パッケージの更新プロセスについて学びました。yum check-update を使用して、インストールせずにシステム全体の更新状況を確認する方法を習得しました。さらに、yum update <package> で特定のパッケージを更新し、最後に yum update コマンドでシステム全体の更新トランザクションを確認することで、承認前にアップグレードの内容を把握する方法を学びました。