dnf頻出パターンの紹介
dnfで使いがちなものを紹介します。
※記載しているコマンドや手順については、本番環境での実行時には事前に検証環境で試したうえで、実行をしてください。この記事をベースに操作をして、損害があったとしても保証いたしかねます。
目次
便利なdnf関連ツール
パッケージの更新時に、OSの再起動が必要になるものがあります。
基本的には、kernelパッケージが対象になりますが、コマンドからそれを確認する方法があります。
そのコマンドを利用するには、dnf-utilsをインストールしておく必要があります。
```bash sudo dnf install -y dnf-utils # インストールが必要ない可能性があります ```
新規インストール
```bash sudo dnf install -y <パッケージ名> # <パッケージ名> <パッケージ名> .. とすると、複数のパッケージをインストールできる。 ```
パッケージ管理
セキュリティ含む全ての更新を適用(カジュアル版)
```bash sudo dnf upgrade -y sudo needs-restarting -r # 事前にdnf-utilsをインストールしておくと、このコマンドで再起動の要否を判定できます。 ## 再起動の必要がなければ、以下のメッセージが出力されます。 ## No core libraries or services have been updated since boot-up. ## Reboot should not be necessary. ```
セキュリティ含む全ての更新を適用(フォーマル版)
```bash # 本番環境で実行するときには、メンテナンスウィンドウは設けたうえで、以下の手順を踏むこと推奨 # 再起動をかけられる状態にしておいたほうが、都合がよいです。 # ``` # sudo dnf check-update <パッケージ名を含めることも可>| tee "$(date +%Y%m%d)_dnf_check.log" # アップデート対象一覧の確認し、結果をログに上書き出力 # sudo dnf upgrade --assumeno <パッケージ名を含めることも可> | tee "$(date +%F)_dnf_dryrun.log" # アップデート実行時に起きることをドライランし、結果をログに上書き出力 # ``` ## kernel,glibc,systemdについてはバージョンアップ前後で再起動が必要だったり、アプリケーションの動作に変化がある可能性があるため注意してください。 ## その他、環境によってモジュールの更新による影響有無は異なるので、開発環境を作って実行することを推奨します。 ## 環境の準備が面倒な人は、せめてOSのスナップショットを取り、上記2つのコマンドの実行結果を残しておきましょう。 sudo dnf upgrade -y <パッケージ名を含めることも可> sudo needs-restarting -r # 事前にdnf-utilsをインストールしておくと、このコマンドで再起動の要否を判定できます。 ## 再起動の必要がなければ、以下のメッセージが出力されます。 ## No core libraries or services have been updated since boot-up. ## Reboot should not be necessary. ```
セキュリティアドバイザリ(CVE等)に関するパッケージ更新を適用
セキュリティアドバイザリ(CVE等)に関するパッケージ更新を適用(カジュアル版)
セキュリティ更新をするときには、既存環境に影響を及ぼさないように--securityを推奨します。
ただし、パッケージのバージョン変更は発生します。
```bash sudo dnf upgrade --security -y sudo needs-restarting -r # 事前にdnf-utilsをインストールしておくと、このコマンドで再起動の要否を判定できます。 ## 再起動の必要がなければ、以下のメッセージが出力されます。 ## No core libraries or services have been updated since boot-up. ## Reboot should not be necessary. ```
セキュリティアドバイザリ(CVE等)に関するパッケージ更新を適用(フォーマル版)
セキュリティ更新をするときには、既存環境に影響を及ぼさないように--securityを推奨します。
ただし、パッケージのバージョン変更は発生します。
変更にシビアな環境では、更新対象のパッケージの変更点について事前に調べておかないといけません。
また、全てのセキュリティアップデートがこのコマンドで適用されず、通常のパッケージ更新をしないといけないものがあるようです。
(情報収集しないで、手順通りポチポチカチカチ更新するのは、やはりダメのようですね。)
```bash # 本番環境で実行するときには、メンテナンスウィンドウは設けたうえで、以下の手順を踏むこと推奨します。 # 再起動をかけられる状態にしておいたほうが、都合がよいです。 # ``` # sudo dnf list --security <パッケージ名を含めることも可>| tee "$(date +%Y%m%d)_dnf_list_security.log" # セキュリティ更新のみリスト表示 # sudo dnf upgrade --security --assumeno <パッケージ名を含めることも可> | tee "$(date +%Y%m%d)_dnf_upgrade_security.log" # セキュリティ更新時に起きることをドライランできる。 # ``` sudo dnf upgrade --security -y <パッケージ名を含めることも可> sudo needs-restarting -r # 事前にdnf-utilsをインストールしておくと、このコマンドで再起動の要否を判定できます。 ## 再起動の必要がなければ、以下のメッセージが出力されます。 ## No core libraries or services have been updated since boot-up. ## Reboot should not be necessary. ```
dnfのアップデートのメタ情報はデフォルトでは、48時間で自動失効し、失効するとOSが同期します。
緊急のセキュリティアップデートの場合には、キャッシュを強制失効が必要かもしれません。
セキュリティアップデート先のバージョンが一致しない場合には、こちらを試してください。
実害は無いと思いますが、--assumenoを実行してもキャッシュ更新は行われます。
```bash sudo dnf upgrade --security --refresh --assumeno | tee "$(date +%F)_dnf_security_.log" ```
パッケージ削除(不要な依存関係の削除)
パッケージ削除(不要な依存関係の削除)(カジュアル版)
```bash # dnf removeは、デフォルトで削除したパッケージしか参照していない不要な依存パッケージも一緒に削除 sudo dnf remove -y <パッケージ名> ```
パッケージ削除(不要な依存関係の削除)(フォーマル版)
```bash # 本番環境で実行するときには、メンテナンスウィンドウは設けたうえで、以下の手順を踏み、削除されるパッケージを確認する。 # ``` # sudo dnf remove –assumeno <パッケージ名> | tee "$(date +%Y%m%d)_dnf_remove_autoremove.log" # 削除されるパッケージの出力 # ``` # dnf removeは、デフォルトで削除したパッケージしか参照していない不要な依存パッケージも一緒に削除する sudo dnf remove -y <パッケージ名> ```
パッケージ削除(依存関係をのこして削除)
パッケージ削除(依存関係をのこして削除)(カジュアル版)
```bash # 「不要な依存パッケージ」と判定されるものを、CLIから使っている場合などでは影響する可能性がある。 # --noautoremoveは、対象以外のパッケージは削除しない。 sudo dnf remove --noautoremove -y <パッケージ名> ```
パッケージ削除(依存関係をのこして削除)(フォーマル版)
```bash # 本番環境で実行するときには、メンテナンスウィンドウは設けたうえで、以下の手順を踏み、削除されるパッケージを確認する。 # 「不要な依存パッケージ」と判定されるものを、CLIから使っている場合などでは影響する可能性がある。 # ``` # sudo dnf remove --noautoremove –assumeno <パッケージ名> | tee "$(date +%Y%m%d)_dnf_remove_noautoremove.log" # 削除されるパッケージの出力 # ``` # --noautoremoveは、対象以外のパッケージは削除しない。 sudo dnf remove --noautoremove -y <パッケージ名> ```
インストール済みパッケージの出力・検索
```bash # OSにインストールされているパッケージを一覧表示 # 通常は、grepするなどして利用するほど大量に出力される。バックアップとして結果を出力するケースもある。 dnf list installed ```
未インストールの利用可能なリポジトリのパッケージの出力
```bash dnf list available # grepを使ってパッケージをフィルタすることを推奨する。 ```
パッケージ詳細情報
```bash # installed/availableのパッケージでのバージョンやリポジトリ、説明文を詳細表示 dnf info <パッケージ名> ```
キャッシュ更新
```bash dnf makecache --refresh # 最新のリポジトリ情報に更新する。 ```
キャッシュ全削除
dnfのキャッシュがストレージを逼迫するような時にしばしば実行します。
キャッシュが良くないことをしている場合も、これで解決することがあります。
```bash sudo dnf clean all # ダウンロード済みRPMやメタデータのキャッシュを全てクリア ```
記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。
当社製品以外のサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。