dnfの実戦
目標
dnfでリポジトリを確認し、インストールし、ファイルからパッケージを逆引きし、トランザクションをロールバックし、バージョンを固定します。
なぜ重要なのか
dnfの決定的な違いは、すべてのインストールがトランザクションとして記録され、元に戻せることです。aptには、対応する機能がありません。この違いが運用の方法を変えます。「とりあえずインストールしてみて、違えば元に戻す」が可能になります。ただし、以前のバージョンがリポジトリになければ失敗し、カーネルやglibcのようなシステムパッケージのダウングレードはサポートされません。
そしてdnf providesは、dpkg -Sより強力です。リポジトリのメタデータを調べるので、まだインストールされていないパッケージまで探してくれます。RPMでは依存関係の単位がパッケージ名ではなくケイパビリティ(ファイルパス、ライブラリのsoname)なので、このツールが必須です。
ステップ
/root/rhディレクトリを作成し、詳細なリポジトリ一覧を/root/rh/repolist.txtに保存してください。/opt/localrepoを指すbaseurlが表示されている必要があります。treeパッケージの情報を照会して、バージョン文字列だけを1行で/root/rh/tree-version.txtに書いてください。treeとnanoをインストールし、2つのパッケージのNEVRA(rpm -qの出力)を1行ずつ/root/rh/installed.txtに書いてください。/usr/bin/treeを提供するパッケージを探し、パッケージ名だけを1行で/root/rh/provides.txtに書いてください。- dnfのトランザクション一覧を
/root/rh/history.txtに保存してください。最低でも1件のトランザクションがある必要があります。 nanoをインストールしたトランザクションを元に戻してください(undo)。元に戻したあと、nanoがインストールされていない必要があり、その状態を/root/rh/after-undo.txtに保存してください。treeのバージョンを固定してください。dnf versionlockプラグインがあればそのコマンドで、なければ/etc/dnf/plugins/versionlock.listに直接書いてください。固定の状態を/root/rh/lock.txtに保存してください。/root/rh/report.txtを次の4行で作成してください。TREE=<tree 의 설치 버전>/NANO=<removed 또는 installed>/PROVIDER=<4번에서 찾은 패키지 이름>/LOCKED=tree(プレースホルダーは順に、treeのインストールされているバージョン、removedかinstalledのどちらか、ステップ4で見つけたパッケージ名です)
参考
dnf repolist -v、dnf info tree、dnf provides '*/bin/tree'、dnf history、dnf history undo <ID> -yの順です。- インストールの有無の確認は
rpm -q <패키지>です。なければ「is not installed」と表示されます(プレースホルダーはパッケージ名です)。 - バージョンだけを取り出すには、
rpm -q --qf '%{VERSION}-%{RELEASE}\n' <패키지>が便利です(プレースホルダーはパッケージ名です)。 - よくある間違い1: ステップ6でトランザクションIDを誤って選び、見当違いのものを元に戻してしまう場合です。先に
dnf history info <ID>で確認してください。 - よくある間違い2: ステップ4で
dnf providesの出力全体を保存してしまう場合です。パッケージ名だけが必要です。
リポジトリの確認
/root/rhディレクトリを作成し、詳細なリポジトリ一覧を/root/rh/repolist.txtに保存してください。/opt/localrepoを指すbaseurlが表示されている必要があります。
dnf repolistには、詳細出力のオプションがあります。ローカルリポジトリのbaseurlが表示されている必要があります。
パッケージ情報の照会
treeパッケージの情報を照会して、バージョン文字列だけを1行で/root/rh/tree-version.txtに書いてください。
dnf infoは、バージョン、リポジトリ、サイズ、概要を表示します。バージョンの値だけを取り出してみてください。
パッケージのインストール
treeとnanoをインストールし、2つのパッケージのNEVRA(rpm -qの出力)を1行ずつ/root/rh/installed.txtに書いてください。
インストール後にrpm -qで確認する習慣を身につけてください。名前-バージョン-リリース.アーキテクチャの形式で出力されます。
ファイルからパッケージを逆引き
/usr/bin/treeを提供するパッケージを探し、パッケージ名だけを1行で/root/rh/provides.txtに書いてください。
dnf providesは、リポジトリのメタデータまで調べるので、インストールされていないパッケージも見つけます。
トランザクションの確認
dnfのトランザクション一覧を/root/rh/history.txtに保存してください。最低でも1件のトランザクションがある必要があります。
dnf historyで一覧を、history infoで詳細を見ます。IDは数字です。
トランザクションを元に戻す
nanoをインストールしたトランザクションを元に戻してください(undo)。元に戻したあと、nanoがインストールされていない必要があり、その状態を/root/rh/after-undo.txtに保存してください。
undoは、指定したトランザクションの逆を実行します。確認なしで進めるには-yが必要です。
バージョンの固定
treeのバージョンを固定してください。dnf versionlockプラグインがあればそのコマンドで、なければ/etc/dnf/plugins/versionlock.listに直接書いてください。固定の状態を/root/rh/lock.txtに保存してください。
プラグインがあればコマンドで、なければ設定ファイルに直接書けます。
総合レポート
/root/rh/report.txtを次の4行で作成してください。
TREE=<tree 의 설치 버전> / NANO=<removed 또는 installed> / PROVIDER=<4번에서 찾은 패키지 이름> / LOCKED=tree(プレースホルダーは順に、treeのインストールされているバージョン、removedかinstalledのどちらか、ステップ4で見つけたパッケージ名です)
値は実際の照会結果である必要があります。状態は、インストールの有無で判断してください。