ノート:

Oracle LinuxでのDNFの使用

イントロダクション

Oracle Linuxには、システム・パッケージをインストールおよび管理するためのクライアント・ソフトウェアとして、Dandified Yum (DNF)に基づくdnfユーティリティが用意されています。これらのパッケージは、Unbreakable Linux Network (ULN)またはOracle Linux yumサーバーから入手できます。ソフトウェア・パッケージは、標準のdnfコマンドを使用してシステムにインストールします。どちらを使用するかが、システムが適切なULNチャネルのサブスクリプションまたはyumリポジトリを有効にしているかどうかによって異なります。パッケージのインストールまたはアップグレード時に、dnfはパッケージの依存関係と要件を自動的に処理します。

DNFは、従来のyumのコマンドと比較して、機能性とパフォーマンスを大幅に向上させ、モジュラー・コンテンツやより安定した文書化されたAPIを含む多くの新機能を提供します。

目的

このチュートリアルでは、次のことを学習します。

前提条件

Oracle Linuxのデプロイ

ノート:独自のテナンシで実行している場合は、演習環境をデプロイする前に、linux-virt-labs GitHubプロジェクトREADME.mdを読み、前提条件を満たしてください。

  1. Luna Desktopでターミナルを開きます。

  2. linux-virt-labs GitHubプロジェクトをクローニングします。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
  3. 作業ディレクトリに変更します。

    cd linux-virt-labs/ol
  4. 必要なコレクションをインストールします。

    ansible-galaxy collection install -r requirements.yml
  5. 演習環境をデプロイします。

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6"

    空き演習環境には、localhostで実行されている再生に対してansible_python_interpreterを設定する追加の変数local_python_interpreterが必要です。この変数は、python3.6モジュールにあるOracle Cloud Infrastructure SDK for PythonのRPMパッケージが環境によってインストールされるため必要です。

    デフォルトのデプロイメント・シェイプでは、AMD CPUおよびOracle Linux 8が使用されます。Intel CPUまたはOracle Linux 9または10を使用するには、-e instance_shape="VM.Standard3.Flex"を追加するか、-e os_version="10"-e os_version="9"または-e os_version="8"をデプロイメント・コマンドに設定します。

    重要:プレイブックが正常に実行され、一時停止タスクに到達するまで待ちます。プレイブックのこの段階で、Oracle Linuxのインストールが完了し、インスタンスの準備が整いました。前のプレイをメモしておきます。このプレイでは、デプロイするノードのパブリックIPアドレスとプライベートIPアドレス、およびラボの実行中に必要となるその他のデプロイメント情報が出力されます。

DNFリポジトリの操作

  1. 端末を開き、SSHを介してol-node-01インスタンスに接続します。

    ssh oracle@<ip_address_of_instance>
  2. 有効なリポジトリのリストを取得します。

    dnf repolist

    DNFは、/etc/yum.repos.dディレクトリ内で.repoで終わるファイルを検索します。allオプションを渡すと、有効になっているリポジトリと無効になっているリポジトリの両方のリストを表示できます。リポジトリ・ファイルでは、1つ以上のリポジトリを定義し、enabled=1の場合はリポジトリを有効にし、enabled=0の場合はリポジトリを無効にすることを検討できます。

  3. リポジトリを有効にします。

    Oracle Linux 10:

    sudo dnf config-manager --enable ol10_codeready_builder

    Oracle Linux 9:

    sudo dnf config-manager --enable ol9_codeready_builder

    Oracle Linux 8:

    sudo dnf config-manager --enable ol8_codeready_builder
  4. リポジトリを無効にします。

    Oracle Linux 10:

    sudo dnf config-manager --disable ol10_codeready_builder

    Oracle Linux 9:

    sudo dnf config-manager --disable ol9_codeready_builder

    Oracle Linux 8:

    sudo dnf config-manager --disable ol8_codeready_builder
  5. リポジトリをインストールします。

    Oracle Linuxには、様々な製品の事前構築済リポジトリがパッケージ形式で出荷されます。これらを検索し、インストールして有効にできます。

    dnf search oracle*release*

    Oracle Linux 10:

    sudo dnf install -y oracle-instantclient-release-el10

    Oracle Linux 9:

    sudo dnf install -y oracle-instantclient-release-el9

    Oracle Linux 8:

    sudo dnf install -y oracle-instantclient-release-el8

    推奨されませんが、次の方法でリポジトリをインストールすることもできます。

    1. /etc/yum.repos.dに新しい.repoファイルを直接作成します。
    2. ローカルまたはURLから格納されたリポジトリ・ファイルをインストールできるdnf config-manager --add-repo <repo_file>の使用
  6. DNFキャッシュを削除します。

    パフォーマンスを支援するために、DNFは/var/cache/dnfにデータをキャッシュします。このキャッシュされたデータが古くなり、dnfコマンドが失敗する場合があります。この問題を修正するには、キャッシュされたすべてのアイテムを削除します。

    dnf clean all

    DNFでは、様々なコマンドを実行すると、このキャッシュが時間の経過とともに自動的に再構築されます。コマンドの失敗をトラブルシューティングするには、キャッシュをクリアしてから、失敗したコマンドを再試行します。

パッケージおよびモジュールの管理

Oracle Linux 10のノート: DNFモジュラリティ(モジュールおよびストリーム)は、Oracle Linux 10では使用できません。AppStreamリポジトリから標準パッケージをインストールできますが、以前のリリースと同様にモジュールまたはストリームを有効化またはインストールすることはできません。

DNFモジュラリティが使用されるステップでは、手順はOracle Linux 8およびOracle Linux 9にのみ適用されます。

  1. 有効なリポジトリから使用可能なパッケージのリストを取得します。

    dnf list

    installedまたは availableオプションを使用し、dnf list available gitなどの特定のパッケージ名を要求することで、返される出力を絞り込むことができます。

  2. 使用可能なモジュールを一覧表示します。

    dnf module list

    出力には、システムで使用可能なモジュール、関連するストリームおよびプロファイルが表示されます。ここでは:

    • Name: モジュール名
    • Stream: ストリーム・バージョン
    • Profiles: 使用可能なプロファイルとそのステータス
      • common: 強化された本番対応デプロイメントであり、デフォルト・プロファイルです。
      • development: モジュールに変更を加えるために必要なパッケージをインストールします
      • minimal: 作業アプリケーションを提供する最小のパッケージ・セットをインストールします。

    出力の最後にある Hintを使用して、enableddisabledinstalled、または defaultであるストリームとプロファイルを判別します。

    パッケージと同様に、モジュール名をlistオプションに渡して、そのモジュールのみのステータスを確認できます。

  3. パッケージまたはモジュールに関する情報を取得します。

    dnf info zsh

    この場合、zshはパッケージ名です。モジュールについても同じことを行いますが、moduleコマンドを追加して、dnf module info phpなどの特定のモジュールを追加します。特定のモジュール・ストリームに関する情報が必要な場合は、--profileをモジュール名ではなくmodule:streamとともに渡します。

    dnf module info --profile php:8.2
  4. 使用可能なパッケージまたはインストール済みパッケージを検索します。

    dnf search php
  5. 特定のファイル名またはコマンドを提供するパッケージを検索します。

    providesコマンド(別名whatprovides)では、ファイル名に一致するパッケージが検索されます。フルパスを指定しない場合、DNFは/usr/sbinおよび/usr/binをファイル名に追加します。レガシー目的で、/sbinおよび/binも追加されます。

    dnf provides sudo
  6. パッケージをインストールします。

    sudo dnf install tmux

    yと応答して、パッケージのインストールを確認します。-yオプションを渡すことによって、今後この追加ステップを回避します。DNFでは、デフォルトで有効なリポジトリからパッケージのみがインストールされます。ただし、--enablerepo=<repo name>オプションを渡すことによって、そのデフォルトの動作をバイパスできます。

  7. パッケージを再インストールします。

    sudo dnf reinstall -y tmux

    このコマンドは、基本的にdnf remove、次にdnf installを実行します。重要な違いは、再インストールを使用すると、パッケージに関連付けられたファイルのカスタム構成が維持されることです。

  8. モジュールを有効にします。

    モジュールからパッケージをインストールする前に、それを有効にする必要があります。

    Oracle Linux 9:

    sudo dnf module -y enable nginx:1.22

    Oracle Linux 8:

    sudo dnf module -y enable nginx
  9. モジュールを取り付けます。

    Oracle Linux 9:

    sudo dnf module install -y nginx:1.22

    Oracle Linux 8:

    sudo dnf module install -y nginx:1.14

    パッケージのインストール後、sudo dnf module list nginxを実行すると、1.22ストリームの共通[d]プロファイルの横に[i]が表示されます。

  10. パッケージまたはモジュールを削除します。

    sudo dnf remove -y tmux

    同様に、同じ構文を使用してモジュールを削除するには、パッケージ名を module:stream/profileに置き換えます。

  11. モジュールを切り替えます。

    モジュール・ストリームを切り替えると、コンテンツはシステム上の現在のバージョンのものとは別のバージョンにアップグレードまたはダウングレードされます。また、追加の依存関係のインストールや、不要になったパッケージの削除も処理します。

    sudo dnf module -y switch-to nginx:1.24/common
  12. モジュールを無効にします。

    sudo dnf module -y disable nginx

    モジュールを無効にすると、インストールされているプロファイルが削除され、関連するすべてのモジュールストリームが使用できなくなり、モジュラーRPMSがパッケージセットに含まれなくなります。DNFが競合を検出すると、操作は拒否されます。モジュールを無効にする理由の1つは、新しいパッケージがデフォルトのリポジトリおよびappstreamに存在することです。

  13. モジュールのリセット。

    この操作により、モジュールの状態が有効化または無効化されなくなるように設定されます。DNFはすべてのプロファイルを削除し、デフォルト・プロファイルのパッケージのみを使用できます。

    sudo dnf module -y reset nginx

セキュリティ更新のインストール

  1. 使用可能なすべてのエラッタを一覧表示します。

    dnf updateinfo list

    出力には、有効なリポジトリとそれに続く各更新が表示されます。DNFは、使用可能なエラッタをID順にソートし、そのタイプによってさらに識別します。

    • Severity/Sec : Priority/Security patch
    • bugfix : バグ修正
    • enhancement : 機能拡張

    コマンドに cvesbugfix、または securityを追加して、その特定のエラータタイプだけに出力を絞り込むことができます。--installedを渡して、ホストにインストールされているセキュリティ修正のリストを取得することもできます。

  2. 使用可能なエラッタのサマリーを表示します。

    dnf updateinfo summary
  3. 重大度に基づいたセキュリティ・アップグレードのリストを取得します。

    CriticalImportantModerate、または Low--sec-severityオプションに渡すことができます。

    dnf updateinfo list --sec-severity=Important

    DNFでは、他のオプションをlistコマンドに渡すことができます。--advisory <Advisory ID>を使用して特定のアドバイザを取得するか、--cve <CVD IDを使用して特定のCVEを取得できます。listのかわりにinfoコマンドを使用し、正確なオプションを使用すると、特定のアドバイザまたはCVEに関する詳細情報が提供されます。

  4. 各パッケージを最新バージョンに更新します。

    sudo dnf upgrade -y

    オプションで、-xオプションに続けてパッケージ名を指定して、アップグレードから特定のパッケージを除外できます。Oracle Linuxではすべてのエラッタを適用することをお薦めしますが、upgradeコマンドには次のオプションがあります。

    • --cve: 単一のCVE IDを更新します。
    • --advisory: 単一のアドバイザIDを更新します。
    • --security: すべてのセキュリティ関連のエラッタを更新します。

    または、ユーザーはsudo dnf upgrade-minimalを実行して、バグ修正、拡張またはセキュリティ問題の修正を提供するパッケージにのみ更新を適用できます。

    重要: カーネルの更新後、必ずシステムをリブートしてください。リブートが実現できないシステムを実行する場合は、Oracle Kspliceを使用してカーネル・パッチを適用することをお薦めします。

パッケージ・グループの管理

DNFでは、パッケージグループをインストール、更新、または削除できます。これらのグループは、共通の目的に役立つ依存パッケージの集合です。

  1. 使用可能なグループをリストします。

    dnf group list
  2. グループに含まれるグループのリストを取得します。

    dnf group info "Server with GUI"

    Server with GUIは、GNOMEグラフィカルデスクトップをインストールします。

  3. グループに含まれる個々のパッケージを表示します。

    dnf group info Core
  4. グループをインストールします。

    sudo dnf group install "Server with GUI" --assumeno

    --assumenoオプションは、自動的に「いいえ」と回答し、インストールをスキップしてこのチュートリアルの時間を節約します。このオプションをコマンドから除外し、それを -yオプションに置き換えて自動的にインストールします。DNFには、グループを更新および削除するためのdnf group updateおよびdnf group removeコマンドが用意されています。

DNF履歴機能の使用

DNF履歴機能には、dnfコマンドによって実行されたすべてのアクションが表示されます。履歴機能では、特定のDNFトランザクションの取消し、REDOおよびロールバックが可能です。DNF履歴に加えて、パッケージのインストール、更新および削除も/var/log/dnf.logファイルに記録されます。

  1. すべてのDNFトランザクションをリストします。

    dnf history

    dnf history info <transaction ID>を実行して、いずれかのトランザクションに関連する情報を取得できます。

  2. 特定のトランザクションのロールバック。

    rollbackオプションは、指定された<transaction ID>の後にすべてのトランザクションを元に戻します。単一のトランザクションのみを戻し処理する場合は、かわりにundoを使用します。

    sudo dnf history rollback <transaction ID>

    DNFのhistory rollbackコマンドは、トランザクションIDを増分し、ロールバックを一意のトランザクションとして記録します。

  3. 特定のトランザクションを繰り返します。

    特定のトランザクションをredoし、各ステップを繰り返すことができます。

    sudo dnf history redo <transaction ID>

パッチ適用の自動化

dnf upgradeを手動で実行するかわりに、DNF自動ツールを使用することもできます。このツールは、systemdタイマーを使用して、アップグレードの自動通知、ダウンロードおよびパッケージの自動インストールを行います。

  1. 必要なパッケージをインストールし、タイマーを有効にします。

    sudo dnf install dnf-automatic -y
    sudo systemctl enable --now dnf-automatic.timer
  2. デフォルトの upgrade_type構成を表示します。

    DNF自動ツールの構成ファイルは/etc/dnf/automatic.confです。デフォルトでは、自動アップグレードは使用可能なすべてのアップグレードに適用されます。upgrade_typeパラメータをsecurityに変更して、セキュリティ・アップグレードのみを使用できます。

    grep upgrade_type /etc/dnf/automatic.conf

次のステップ

このチュートリアルでは、Oracle Linuxシステムでソフトウェア・パッケージを管理し、最新のセキュリティ修正を使用してソフトウェア・パッケージを最新の状態に保つ方法を説明します。そのため、システムを更新し、Oracle Linuxの詳細およびトレーニングについて「関連リンク」セクションを確認してください。

その他の学習リソース

docs.oracle.com/learnの他のラボを調べるか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、Oracle Learning Explorerになるには、education.oracle.com/learning-explorerにアクセスしてください。

製品ドキュメントについては、Oracle Help Centerを参照してください。